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

rekjcdws  于 2023-04-08  发布在  .NET
关注(0)|答案(1)|浏览(98)

我正在处理一个CSPROJ文件,其中包含一个类似于以下内容的包引用:

<PackageReference Include="CustomNugetPackage">
      <IncludeAssets Condition=" '$(BooleanVariable)' == true ">compile</IncludeAssets>
</PackageReference>

这个变量 notPropertyGroup中设置,或者在项目文件的任何其他地方设置。我也从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 =
yeotifhr

yeotifhr1#

在这些情况下,预处理是您的朋友。以下命令预处理CSPROJ并将结果输出到名为output.txt的文件中:
msbuild /pp:output.txt .\TestProject.csproj
我检查了output.txt的内容,发现BooleanVariable是在一个单独的文件Directory.Build.props中设置的。

相关问题