无法找出在MSBuild中设置项目文件变量的位置



我正在处理一个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中。

相关内容

最新更新