我正在处理一个CSPROJ文件,其中包含一个类似于以下内容的包引用:
<PackageReference Include="CustomNugetPackage">
<IncludeAssets Condition=" '$(BooleanVariable)' == true ">compile</IncludeAssets>
</PackageReference>
这个变量 not 在PropertyGroup
中设置,或者在项目文件的任何其他地方设置。我也从CLI运行msbuild
,我没有动态设置BooleanVariable
。
我知道在构建过程中它确实有一个值true
,因为我添加了自己的Target
,名为"LogMessage"
,其中包含Message
元素以进行验证,然后使用msbuild ProjectFile /t:LogMessage
构建。
在相关的Powershell终端中运行$Env:BooleanVariable
也没有得到任何结果。
这个变量还可以在哪里设置?即使我从命令行使用msbuild
运行,构建过程如何知道它的值?
编辑
作为对评论的回应,证明msbuild
不会自动设置未显式声明的变量。
在常规控制台应用程序上:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AnotherVariable Condition=" '$(BooleanVariable)' == true ">ABCDE</AnotherVariable>
</PropertyGroup>
<Target Name="LogMessage" AfterTargets="Build">
<Message Text="BooleanVariable = $(BooleanVariable)"/>
<Message Text="AnotherVariable = $(AnotherVariable)"/>
</Target>
</Project>=
使用msbuild TestProject.csproj
编译,观察记录的消息:
LogMessage:
BooleanVariable =
AnotherVariable =
1条答案
按热度按时间yeotifhr1#
在这些情况下,预处理是您的朋友。以下命令预处理CSPROJ并将结果输出到名为
output.txt
的文件中:msbuild /pp:output.txt .\TestProject.csproj
我检查了
output.txt
的内容,发现BooleanVariable
是在一个单独的文件Directory.Build.props
中设置的。