是否可以在C#项目中添加引用,具体取决于条件编译符号(预处理器常量)的值?

时间:2010-10-15 12:23:05

标签: c# .net reference c-preprocessor add

我正在开发一个可以针对两种不同技术进行编译的库。基本上,库的用户应该能够为Unity3D游戏引擎或NeoAxis游戏引擎编译解决方案。问题是:虽然库已准备好进行条件编译(#if UNITY使用... #endif等),但是根据条件编译符号,我找不到启用一组引用或其他引用的方法

有可能吗?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:7)

是的,但您必须在msbuild .csproj文件中执行此操作。该文件基本上只是数据列表,例如引用。

您要做的是在两个参考文献中添加Condition语句。

<Reference ..a.. Condition="'$LibToUse' =='NeoAxis'" />


<Reference ..b.. Condition="'$LibToUse' =='Unitv3D'" />

然后只需使用所需的值定义名为LibToUse的命令行var。

答案 1 :(得分:2)

如何通过条件编译符号添加引用,就像在代码中一样。即,在this post中回答是否在项目设置中设置了UNITY,只需通过编辑.csproj文件,向参考添加条件,并调用 DefineConstants.Contains( )这样的方法:

<Reference Include="yourdll" Condition="$(DefineConstants.Contains('UNITY'))">

答案 2 :(得分:1)

继续并添加所有必要的参考。如果从未在代码中使用它们,编译器将自动删除它们,这要归功于#if/#endif。另一种可能性是提供两个不同的.sln文件,引用指向相同源代码但不同引用的两个不同.csproj文件。有很多项目正在执行此操作:SomeProject_VS2008.slnSomeProject_VS2010.sln