C# 我可以将编译常量传递给项目引用吗?
如果我有一个C# 我可以将编译常量传递给项目引用吗?,c#,msbuild,C#,Msbuild,如果我有一个引用,有没有办法将条件编译值传递给该项目?类似的东西(我知道不存在这样的东西,只是为了说明需要): 然后,通过在编译期间是否传递该值,我可以得到不同的输出。项目引用项允许添加元数据字段属性和未定义属性,以允许对用于构建项目引用的“全局”属性集进行计算。您可以通过如下方式将全局属性传递给引用的项目来使用此属性: public sealed class ProduceValue { public string Produce() { #if
引用,有没有办法将条件编译值传递给该项目?类似的东西(我知道
不存在这样的东西,只是为了说明需要):
然后,通过在编译期间是否传递该值,我可以得到不同的输出。项目引用项允许添加元数据字段
属性
和未定义属性
,以允许对用于构建项目引用的“全局”属性集进行计算。您可以通过如下方式将全局属性传递给引用的项目来使用此属性:
public sealed class ProduceValue
{
public string Produce()
{
#if WAS_SET
return "WAS SET";
#else
return "NOTHING WAS SET";
#endif
}
}
<ProjectReference Include="..\DataProducer\DataProducer.csproj">
<Properties>DefineConstants=WAS_SET</Properties>
<ProjectReference>
DefineConstants=已设置
这现在是引用项目的全局属性,其效果是它将覆盖项目中静态定义的
DefineConstants
的任何定义/更新-这还可能包括任何添加的配置常量(DEBUG
)。我认为可能的原因是“ProjectReference”的“Targets”
在DataProducer.csproj中定义一个目标。
在目标中定义Constants属性。
因此,在构建目标之前先创建目标
那么它应该有效吗
更新:
尝试了我的上一个选项,它不起作用。
另一种选择:
因此,相同的源代码,但不同的dll。这看起来很有希望,但我尝试了你的想法,它似乎没有改变引用的项目。如果你想知道我做了什么,我已经将我的解决方案放入GitHub repo中:我可能做错了什么-如果我遗漏了什么,请告诉我。我的直觉告诉我,当你构建一个包含多个项目的完整解决方案时,增量编译肯定会有问题。。我将在几个小时后看一看,同时我建议尝试从命令行一次只构建一个项目,看看会发生什么。我同意潜在的问题。我只是想看看是否有可能:)@JasonBock你找到解决这个问题的办法了吗?
<ProjectReference Include="..\DataProducer\DataProducer.csproj">
<Properties>DefineConstants=WAS_SET</Properties>
<ProjectReference>