覆盖另一个目标文件的构建后事件

问题描述 投票:0回答:1

我有一个NuGet程序包,该程序包将一个具有目标内容的目标文件添加到我的C#项目中,用于后构建事件。

<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软件包。

visual-studio msbuild target overwrite post-build-event
1个回答
0
投票

覆盖另一个目标文件的构建后事件

实际上,如果要在nuget包中使用多个目标文件,然后根据需要在不同的目标文件之间切换,则无法获得所需的内容。

[正如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%
),则应将属性[[Flag定义为[C0 ]放在true文件的末尾,如下所示:xxx.csproj

少于1%的项目可以使用enter image description here。在其他99%的项目中,不应在ThisIsMyRareTarget.exe中定义Flag属性,它会自动捕获xxx.csproj
© www.soinside.com 2019 - 2024. All rights reserved.