为什么Exec Command不能在netstandard2.0的.csproj中工作?

时间:2018-01-31 13:33:33

标签: c# .net-core csproj .net-standard execcommand

我忙于将我的代码从.Net Framework库移动到.netstandard2.0库。到目前为止它进展顺利,但现在我仍然坚持使用.csproj文件。

现有项目文件已定义

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

实际命令执行一个exe,它根据xsd生成一堆xml类。

我无法在.netstandard2.0项目中使用它?

我到处搜索,但我找不到合理的原因......

1 个答案:

答案 0 :(得分: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