覆盖目标 post 另一个目标文件的构建事件
Overwrite targets post build event of another targets file
我有一个 NuGet 包,它向我的 C# 项目添加了一个包含 post 构建事件内容的目标文件。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyTarget" AfterTargets="Build">
<Exec Command="ThisIsMyCommand.exe"/>
</Target>
</Project>
在不到1%的项目中,我不需要这个命令,我需要另一个命令来执行。目标文件是否可以从另一个目标文件中暂停目标?
像这样:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyRareTarget" Overwrite="ThisIsMyTarget" AfterTargets="Build">
<Exec Command="ThisIsMyRareCommand.exe"/>
</Target>
</Project>
我不想只为项目的 1% 拆分我的 NuGet 包。
Overwrite targets post build event of another targets file
其实,如果你想把多个target文件打成nuget包,然后根据需要切换不同的target文件,是得不到你想要的。
正如this document所说,当你想通过nuget将目标文件添加到项目中时,你应该确保目标文件的名称与nuget包的名称相同,以便它会起作用。
所以只能使用一个名为<package_id>.targets
的目标文件,并在里面设置一个condidtion
来区分使用哪个工程环境
解决方案
1) 请将这些全部放入您的 <package_id>.targets
文件中:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flag></Flag>
</PropertyGroup>
<Target Name="ThisIsMyTarget" AfterTargets="Build" Condition="'$(Flag)'!='true'">
<Exec Command="ThisIsMyCommand.exe"/>
</Target>
<Target Name="ThisIsMyRareTarget" AfterTargets="Build" Condition="'$(Flag)'=='true'">
<Exec Command="ThisIsMyRareCommand.exe"/>
</Target>
</Project>
2) 然后你打包你的 nuget 项目,当你在其他项目中安装你的 nuget 时(不到 1% 的项目 ), 你应该在 xxx.csproj
文件的末尾定义 属性 Flag 到 true
像这样:
和不到1%的项目可以使用ThisIsMyRareTarget.exe
。在其他99%的项目中,不要在xxx.csproj
中定义Flag 属性,它会自动捕获ThisIsMyCommand.exe
.
感谢@Perry Quian-MSFT。他有正确的观念。
我已经创建了 2 个目标文件/NuGet 包。
使用此目标文件的标准包。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyTarget" AfterTargets="Build" Condition="'$(DontUseStandardCommand)'!='true'">
<Exec Command="ThisIsMyCommand.exe"/>
</Target>
</Project>
罕见案例目标文件如下所示。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyRareTarget" AfterTargets="Build">
<Exec Command="ThisIsMyRareCommand.exe"/>
</Target>
<PropertyGroup>
<DontUseStandardCommand>true</DontUseStandardCommand>
</PropertyGroup>
</Project>
这在我的设置中运行良好,也与项目文件中导入目标文件的顺序无关。
我有一个 NuGet 包,它向我的 C# 项目添加了一个包含 post 构建事件内容的目标文件。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyTarget" AfterTargets="Build">
<Exec Command="ThisIsMyCommand.exe"/>
</Target>
</Project>
在不到1%的项目中,我不需要这个命令,我需要另一个命令来执行。目标文件是否可以从另一个目标文件中暂停目标?
像这样:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyRareTarget" Overwrite="ThisIsMyTarget" AfterTargets="Build">
<Exec Command="ThisIsMyRareCommand.exe"/>
</Target>
</Project>
我不想只为项目的 1% 拆分我的 NuGet 包。
Overwrite targets post build event of another targets file
其实,如果你想把多个target文件打成nuget包,然后根据需要切换不同的target文件,是得不到你想要的。
正如this document所说,当你想通过nuget将目标文件添加到项目中时,你应该确保目标文件的名称与nuget包的名称相同,以便它会起作用。
所以只能使用一个名为<package_id>.targets
的目标文件,并在里面设置一个condidtion
来区分使用哪个工程环境
解决方案
1) 请将这些全部放入您的 <package_id>.targets
文件中:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flag></Flag>
</PropertyGroup>
<Target Name="ThisIsMyTarget" AfterTargets="Build" Condition="'$(Flag)'!='true'">
<Exec Command="ThisIsMyCommand.exe"/>
</Target>
<Target Name="ThisIsMyRareTarget" AfterTargets="Build" Condition="'$(Flag)'=='true'">
<Exec Command="ThisIsMyRareCommand.exe"/>
</Target>
</Project>
2) 然后你打包你的 nuget 项目,当你在其他项目中安装你的 nuget 时(不到 1% 的项目 ), 你应该在 xxx.csproj
文件的末尾定义 属性 Flag 到 true
像这样:
和不到1%的项目可以使用ThisIsMyRareTarget.exe
。在其他99%的项目中,不要在xxx.csproj
中定义Flag 属性,它会自动捕获ThisIsMyCommand.exe
.
感谢@Perry Quian-MSFT。他有正确的观念。
我已经创建了 2 个目标文件/NuGet 包。
使用此目标文件的标准包。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyTarget" AfterTargets="Build" Condition="'$(DontUseStandardCommand)'!='true'">
<Exec Command="ThisIsMyCommand.exe"/>
</Target>
</Project>
罕见案例目标文件如下所示。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ThisIsMyRareTarget" AfterTargets="Build">
<Exec Command="ThisIsMyRareCommand.exe"/>
</Target>
<PropertyGroup>
<DontUseStandardCommand>true</DontUseStandardCommand>
</PropertyGroup>
</Project>
这在我的设置中运行良好,也与项目文件中导入目标文件的顺序无关。