我正在处理一个CSPROJ文件,其中包含一个类似于以下内容的包引用:
<PackageReference Include="CustomNugetPackage">
<IncludeAssets Condition=" '$(BooleanVariable)' == true ">compile</IncludeAssets>
</PackageReference>
这个变量是而不是在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 =
标题>在这些类型的情况下,预处理是您的朋友。以下命令对CSPROJ进行预处理,并将结果输出到一个名为output.txt
的文件中:
msbuild /pp:output.txt .TestProject.csproj
我检查了output.txt
的内容,结果发现BooleanVariable
被设置在一个单独的文件Directory.Build.props
中。