BeforeBuild不在csproj中工作

Gla*_*tto 2 c# msbuild visual-studio

我正在尝试在.csproj(vs2017)中使用目标事件"BeforeBuild",但它无效.有人会知道什么是错的:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <Target Name="BeforeBuild">
    <Message Text="Test123"></Message>
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

预期的结果是一条消息:输出上的Test123.

[]中

Leo*_*SFT 8

BeforeBuild不在csproj中工作

那是因为csproj中的Before/AfterTarget被SDKs目标文件覆盖了.

如果您在Project元素上使用新的Sdk属性,则无法在默认的.targets导入后放置目标定义.这可能会导致人们意外放入项目文件中的目标没有运行,除非您检查日志文件并查看目标已被覆盖的消息,否则无法指示原因.

dsplaisted已针对此问题提交了Microsoft/msbuild#1680.作为解决方法,您可以执行以下操作:

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <PreBuildEvent />

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

  <Target Name="BeforeBuild">
    <Message Text="Test123"></Message>
  </Target>
Run Code Online (Sandbox Code Playgroud)

要么:

  <Target Name="test" BeforeTargets="Build">
    <Message Text="Test123" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在大多数情况下,它应该是`BeforeTargets =“ BeforeBuild”`或在CoreBuild之前才能真正在编译步骤之前运行,因为`Build`目标仅取决于其他几个目标。(但对于跨目标项目则不这样)在外部项目上) (4认同)