为什么 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
.
我正忙于将我的代码从 .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
.