添加在Visual Studio 2017 RC中构建.NET Core项目后运行的msbuild任务

Fio*_*onn 22 c# msbuild csproj visual-studio-2017

在Visual Studio 2017 RC中是否有像msbuild中的AfterBuild Target和.NET Core?

我尝试将以下剪切添加到.csproj文件中,但在构建期间不会执行此操作(与VS2015相反,它可以正常工作).

<Target Name="AfterBuild">
  <Message Importance="High" Text="This is a test" />
</Target>
Run Code Online (Sandbox Code Playgroud)

另一个有趣的发现:我认为AfterBuild目标可能已被删除 - 运行msbuild <project.csproj> /t:AfterBuild似乎并未调用添加的目标.如果我将目标重命名为"测试"一个调用它就msbuild <project.csproj> /t:Test可以正常工作.


另外,是否有关于Visual Studio 2017 RC附带的msbuild版本(以及可能的.NET Core构建脚本)的任何文档?

Mik*_*ray 35

另一种方法是在Target上使用AfterTargets属性.就像是:

<Target Name="TestTarget" AfterTargets="Build">
  <Message Importance="High" Text="This is a test" />
</Target>
Run Code Online (Sandbox Code Playgroud)

我不确定为什么"AfterBuild"不再起作用,但这似乎是MSBuild的维护者有意识地决定的(h/t给Livven指的是这个github问题)."AfterBuild"是Build目标使用的特殊名称.目前的版本Microsoft.Common.CurrentVersion.targets还有:

  <PropertyGroup>
    <BuildDependsOn>
      BeforeBuild;
      CoreBuild;
      AfterBuild
    </BuildDependsOn>
  </PropertyGroup>
  <Target
      Name="Build"
      Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
      DependsOnTargets="$(BuildDependsOn)"
      Returns="$(TargetPath)" />
  <!--
Run Code Online (Sandbox Code Playgroud)

  • 另一种方式就是救了我. (6认同)
  • 实际上,旧的`BeforeBuild`和`AfterBuild`目标不再适用于.NET Core项目,这似乎是设计的.请参阅https://github.com/dotnet/cli/issues/5844和https://github.com/Microsoft/MSBuild/issues/1680 (4认同)