阻止移动项目在共享项目中使用某些 .cs 文件

Posted

技术标签:

【中文标题】阻止移动项目在共享项目中使用某些 .cs 文件【英文标题】:Preventing mobile projects from using certain .cs files in a Shared Project 【发布时间】:2021-01-30 03:44:40 【问题描述】:

我正在制作一个移动应用程序。在我的解决方案中,我有一个共享项目。一些我不想在我的 iosandroid 版本中使用的文件。

我的代码如下所示:

#if __MOBILE__
#else
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
using System;

namespace Blah.Utils

   public static class AzureBlobService
   
       public static async Task<string> CreateCloudQueue(string connectionString, string queueName)
       
         // blah
       
   

#endif

这似乎不会为我的移动应用程序删除此文件。它仍然希望我得到那些 nuget Azure.Storage 包。我怎样才能让#if 以我想要的方式工作?

【问题讨论】:

你是否在这些版本中将 __MOBILE__ 设置为 true? 嗯,如何将其设置为 true?在搞砸之后......似乎 MOBILE 设置为 false? (换句话说,如果我将#else 放在#endif 正上方的行中,它就可以工作。) 是的。但是您不想每次为不同的目标构建代码时都更改代码,对吗?在 Visual Studio 上,您可以为您的项目设置不同的构建配置文件。默认为调试和发布。但是你可以添加更多。在这些配置文件中,您可以设置像这样的开关。 在我的 android 和 iOS 版本中,我永远不想使用上面显示的文件。我已经转到 Android 属性/构建/条件编译符号并将文本 MOBILE 放在调试和发布中。我假设一旦我这样做......它应该将 MOBILE 设置为真实值?但它根本没有设置为真实值。它似乎并没有做任何事情。 当我放置内置的 DEBUG 符号时,它按预期工作。 【参考方案1】:

在为此苦苦挣扎了很长时间之后,我认为这一定是某个地方的一些晦涩的设置……这是因为我的共享库被我的移动应用项目之间的一个项目引用了。

换句话说,这些项目是这样相互引用的: Sharedproject

而且我没有将 MOBILE 放在 CoreLib 项目属性的“条件编译符号”中。

【讨论】:

以上是关于阻止移动项目在共享项目中使用某些 .cs 文件的主要内容,如果未能解决你的问题,请参考以下文章

文件嵌套不适用于类或共享库项目

具有共享类的引用 DLL

在 Android NDK 项目中使用我自己的预构建共享库

项目,包括多个Dockerfile和共享某些文件的应用。如何构造?

在微服务之间共享文件

移动项目后,我在文件顶部更改了什么?