【问题标题】:Why doesn't Exec Command work in a .csproj for netstandard2.0?为什么 Exec Command 在 netstandard2.0 的 .csproj 中不起作用?
【发布时间】:2018-01-31 13:33:33
【问题描述】:

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

现有的项目文件有这个定义

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

实际的命令会执行一个 exe,它会基于一个 xsd 生成一堆 xml 类。

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

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

【问题讨论】:

  • 您搜索过什么,到目前为止您尝试过什么?我刚刚发现 this answer 可能有用
  • 我无法让它工作这到底是什么意思?
  • @Liam:我的经验是绝大多数支持 - 而“.NET Core”和“.NET Standard”是不同的东西,已经稳定很长一段时间的名字。
  • 也许我会像其他人一样学习python...
  • 您是否使用 /v:diag 运行构建?如果没有,请按照您从中学到的内容和edit 进行操作。

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


【解决方案1】:

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

<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

【讨论】:

  • 谢谢马丁!我将 添加到我的项目文件中,然后所有目标(“Rebuild”、“Build”和“Clean”)都工作了。
  • 如果这对您有用,请考虑接受答案
  • 完成,抱歉没有看到勾号:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2019-10-26
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多