【问题标题】:Is it possible to add a reference in a C# project depending on the value of a conditional compilation symbol (preprocessor constant)?是否可以根据条件编译符号(预处理器常量)的值在 C# 项目中添加引用?
【发布时间】:2023-04-06 06:05:01
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    您所做的是将Condition 语句添加到两个引用中。

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

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

    【讨论】:

      【解决方案3】:

      如何像在代码中那样通过条件编译符号添加引用。即在项目设置中设置或不设置例如 UNITY 在this post 中回答,只需编辑您的 .csproj 文件、向引用添加条件并调用 DefineConstants.Contains() 方法如下:

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

      【讨论】:

        猜你喜欢
        • 2013-11-08
        • 2020-06-08
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 2011-10-04
        相关资源
        最近更新 更多