6

我有一个类库 A,用于我的解决方案中的其他项目,如 B 和 C。

类库 A 的行为基于预处理器指令的存在而有所不同,例如:

#if some_directive
      // some code
#else
      // some other code
#end

如何在启用的项目 B 中使用类库 Asome_directive但在禁用的项目 C 中使用some_directive

4

3 回答 3

2

目前似乎不支持此功能。根据这篇文章

该语言不支持通过预处理器宏引用的概念。您可以做的是使用 msbuild 文件并更改基于 msbuild 参数添加的引用集。

我使用的另一个解决方法是在“配置管理器”中使用解决方案配置。我为构建每个项目 B 或 C 创建了两个配置,其中预处理器指令仅在其中一个配置中启用。

于 2013-07-23T07:46:34.267 回答
2

您可以使用ConditionalAttribute

这是Debug.WriteLine()存在或不存在的方式,具体取决于“DEBUG”符号的存在。

您将能够为用于控制代码是否存在的条件符号定义自己的名称。

然后,您可以将该符号放入项目属性“构建”选项卡上的“条件编译符号”设置中的列表中,以用于您想要代码的项目。

不幸的是,这不允许您拥有“其他代码”部分,而且它仅适用于整个方法。

于 2013-05-14T09:06:14.660 回答
0

我知道这个话题很老了——对我来说,以下方法效果很好,也可能适合:欢迎评论这种方法的(缺点)优点。如果您将 .cs 文件作为现有项目添加为每个项目的链接 - 您可以使用不同的指令对其进行编译。要将现有项目添加为链接文件,请参阅此帖子中的屏幕截图 使用文件夹来组织链接文件。

// file ClassA.cs

namespace HelperClasses
{
     public ClassA
    {
    #if some_directive
      // some code
    #else
      // some other code
    #end
    // ....
    }
}

// using statement in Project B and C
using HelperClasses
// Add ClassA.cs in both Projects B and C
// as exiting, linked File -- not as a Reference
// set the compiler-Directives according your needs
于 2017-05-09T10:11:04.980 回答