我可以将编译常量传递给项目参考吗?

时间:2017-08-10 20:25:33

标签: c# msbuild

如果我有一个<ProjectReference>引用,有没有办法将条件编译值传递给该项目?这样的事情(我知道<DefineConstants>不存在这样的情况,只是为了说明需要):

<ProjectReference Include="..\DataProducer\DataProducer.csproj">
  <DefineConstants>WAS_SET</DefineConstants>
<ProjectReference>

因此,如果该项目中有一个类如下:

    public sealed class ProduceValue
    {
        public string Produce()
        {
#if WAS_SET
            return "WAS SET";
#else
            return "NOTHING WAS SET";
#endif
        }
    }

然后通过在编译期间传递该值,我可以获得不同的输出。

1 个答案:

答案 0 :(得分:-1)

我认为可能的解决方案是“ ProjectReference”的“ Targets” https://github.com/dotnet/msbuild/blob/master/src/MSBuild/MSBuild/Microsoft.Build.CommonTypes.xsd#L644

在DataProducer.csproj中定义目标。 在目标中定义Constants属性。 因此先确定目标,再确定目标。

那它应该工作吗?

更新

尝试了我的上一个选项,它不起作用。 另一个选择:

  1. 复制DataProducer.csproj并重命名为DataProducer.WAS_SET.csproj
  2. 为DataProducer.WAS_SET.csproj添加DefineConstants
  3. 更新ProjectReference Include =“ .. \ DataProducer \ DataProducer.WAS_SET.csproj”

因此,DataProducer.csproj和DataProducer.WAS_SET.csproj将共享代码。 我们可以参考我们想要的任何人。

,我们可以为这两个csproj使用不同的AssemblyName。 因此源代码相同,但dll不同。