覆盖目标 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 文件的末尾定义 属性 Flagtrue 像这样:

不到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>

这在我的设置中运行良好,也与项目文件中导入目标文件的顺序无关。