是否可以根据条件编译符号(预处理器常量)的值在C#项目中添加引用?

是否可以根据条件编译符号(预处理器常量)的值在C#项目中添加引用?,c#,.net,reference,c-preprocessor,add,C#,.net,Reference,C Preprocessor,Add,我正在开发一个可以为两种不同技术编译的库。基本上,库的用户应该能够为游戏引擎或游戏引擎编译解决方案。问题是:虽然库已经准备好进行条件编译(if UNITY使用…#endif等),但我找不到一种方法根据条件编译符号启用一组引用或其他引用 有可能吗?如果是,怎么做?继续添加所有必要的参考资料。如果在您的代码中从未使用过它们,编译器将自动删除它们,这要归功于\if/#endif。另一种可能是提供两个不同的.sln文件,引用指向相同源代码但不同引用的两个不同的.csproj文件。有许多项目正在执行此操作

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


有可能吗?如果是,怎么做?

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

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

您要做的是在两个引用中添加一条语句

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


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


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

如何像在代码中那样通过条件编译符号添加引用。i、 e.在项目设置中设置或未设置例如UNITY的问题将在中得到回答,只需编辑.csproj文件,向引用中添加一个条件,然后调用DefineConstants.Contains()方法,如下所示:

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

使用多个csproj文件违反了DRY原则,维护起来非常麻烦