无法覆盖 C# 项目中的 BuildDependsOn

ddn*_*son 2 .net msbuild

我正在尝试遵循此处的文档 - https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-extend-the-visual-studio-build-process?view=vs-2017 -- 将一个简单的 Target 添加到 .NET Core 项目文件的构建管道中。但是,我做错了什么,只是看不到它。

我采用了一个简单的“Hello World”项目文件,添加了一个仅打印消息的简单目标,并BuildDependsOn按照文档的建议重新定义以获取:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>

    <BuildDependsOn>
      Target1;
      $(BuildDependsOn)
    </BuildDependsOn>
  </PropertyGroup>

  <Target Name="Target1">
    <Message Text="Running Target1" Importance="high" />
  </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 msvc2017 或 dotnet CLI(“dotnet build -c Release Hello.csproj”)“构建”此项目时,不会打印该消息。

当我使用 msbuild 查看完全预处理的项目时,我可以清楚地看到BuildDependsOn属性的定义。我不确定为什么我的重新定义没有被采纳。我也试过同样的方法RebuildDependsOn,但没有效果。

有什么建议?我在这里缺少什么?

在此先感谢您的帮助!

Ala*_*est 5

事情没有像您预期的那样工作的原因是因为您有一个 SDK 风格的项目:<Project Sdk="Microsoft.NET.Sdk">.

请注意:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

相当于:

<Project>
  <!-- Implicit top import -->
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

  <!-- Implicit bottom import -->
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>
Run Code Online (Sandbox Code Playgroud)

Sdk.targets项目结束时的隐式导入会覆盖您对 的定义BuildDependsOn。

您可以改为显式添加导入,然后BuildDependsOn在Sdk.targets导入后添加您的定义。

<Project>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <Target Name="Target1">
    <Message Text="Running Target1" Importance="high" />
  </Target>

  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />

  <PropertyGroup>
    <BuildDependsOn>
      Target1;
      $(BuildDependsOn)
    </BuildDependsOn>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

请参阅如何:扩展 Visual Studio 构建过程和如何:使用 MSBuild 项目 SDK。