在Visual Studio中更改项目引用中的条件编译

时间:2013-05-14 09:00:16

标签: c# visual-studio build

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

类库A基于预处理器指令的存在而表现不同,例如:

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

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

3 个答案:

答案 0 :(得分:1)

您可以使用ConditionalAttribute

执行此类操作

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

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

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

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

答案 1 :(得分:1)

目前似乎不支持此功能。根据{{​​3}}:

  

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

我使用的另一种解决方法是在“Configuration Manager”中使用this post。我创建了两个用于构建每个项目B或C的配置,其中只在其中一个配置中启用了预处理器指令。

答案 2 :(得分:0)

我知道这个主题已经过时了 - 对我来说,下面的方法效果很好,也可能适合: (dis)对这种方法的优点的评论是值得欢迎的。 如果将.cs文件作为现有项添加为每个项目的链接 - 您可以使用不同的指令编译它 要将现有项目添加为链接文件,请参阅屏幕截图at this post 使用文件夹来组织链接文件。

// 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