我正在开发一个可以针对两种不同技术进行编译的库。基本上,库的用户应该能够为Unity3D游戏引擎或NeoAxis游戏引擎编译解决方案。问题是:虽然库已准备好进行条件编译(#if UNITY使用... #endif等),但是根据条件编译符号,我找不到启用一组引用或其他引用的方法
有可能吗?如果是这样,怎么样?
答案 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.sln
和SomeProject_VS2010.sln
。