【发布时间】:2023-04-06 06:05:01
【问题描述】:
我正在开发一个可以针对两种不同技术编译的库。基本上,库的用户应该能够为Unity3D 游戏引擎或NeoAxis 游戏引擎编译解决方案。问题是:虽然库已准备好进行条件编译(#if UNITY using ... #endif 等),但我找不到根据条件编译符号启用一组引用或其他引用的方法.
有可能吗?如果有,怎么做?
【问题讨论】:
标签: c# .net reference c-preprocessor add
我正在开发一个可以针对两种不同技术编译的库。基本上,库的用户应该能够为Unity3D 游戏引擎或NeoAxis 游戏引擎编译解决方案。问题是:虽然库已准备好进行条件编译(#if UNITY using ... #endif 等),但我找不到根据条件编译符号启用一组引用或其他引用的方法.
有可能吗?如果有,怎么做?
【问题讨论】:
标签: c# .net reference c-preprocessor add
继续添加所有必要的引用。如果您的代码中从未使用过它们,编译器将自动删除它们,这要归功于#if/#endif。另一种可能性是提供两个不同的.sln 文件引用两个不同的.csproj 文件,它们指向相同的源代码但不同的引用。有很多项目这样做:SomeProject_VS2008.sln 和 SomeProject_VS2010.sln。
【讨论】:
是的,但您必须在 msbuild .csproj 文件中执行此操作。该文件本质上只是数据列表,例如引用。
您所做的是将Condition 语句添加到两个引用中。
<Reference ..a.. Condition="'$LibToUse' =='NeoAxis'" />
<Reference ..b.. Condition="'$LibToUse' =='Unitv3D'" />
然后只需使用所需的值定义名为 LibToUse 的命令行变量。
【讨论】:
如何像在代码中那样通过条件编译符号添加引用。即在项目设置中设置或不设置例如 UNITY 在this post 中回答,只需编辑您的 .csproj 文件、向引用添加条件并调用 DefineConstants.Contains() 方法如下:
<Reference Include="yourdll" Condition="$(DefineConstants.Contains('UNITY'))">
【讨论】: