为什么 Exec Command 在 netstandard2.0 的 .csproj 中不起作用?

Why doesn't Exec Command work in a .csproj for netstandard2.0?

我正忙于将我的代码从 .Net Framework 库移至 .netstandard2.0 库。到目前为止一切顺利,但现在我被困在 .csproj 文件中。

现有项目文件已定义

  <Target Name="Rebuild">
    <Exec Command="echo Now Rebuilding the package" />
  </Target>

实际命令执行的 exe 会根据 xsd 生成一堆 xml 类。

我不能让它在 .netstandard2.0 项目中工作?

我到处搜索,但我找不到这个不起作用的原因...

我怀疑在您的特定实例中,Rebuild 目标将被在您的代码之后隐式导入的 sdk 目标覆盖。如果要覆盖SDK提供的任务,需要改为显式SDK导入(而不是<Project Sdk="...">):

<Project>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
  <!-- other project content -->
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
  <Target Name="Build">
    <!-- overwrite Build target here -->
  </Target>
  <Target Name="Rebuild">
    <!-- overwrite Rebuild target here -->
  </Target>
</Project>

支持 Exec 目标,但 echo 命令可能会或可能不会工作,具体取决于您 运行 正在使用它的平台(因为 echo 可能是只是 shell 的内置命令,但没有可执行文件 运行).

确保:

  • 该命令以在 PATH 上找到的可执行文件的路径开头,或者指定为相对于正在构建的 csproj 文件的绝对路径或相对路径。
  • 目标实际执行。例如。有些程序可以使用 /t:Clean;Build 而不是 /t:Rebuild.