我有一个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软件包。
覆盖另一个目标文件的构建后事件
实际上,如果要在nuget包中使用多个目标文件,然后根据需要在不同的目标文件之间切换,则无法获得所需的内容。
[正如this document所说,当您想通过nuget将目标文件添加到项目中时,应确保目标文件的名称与nuget包的名称相同,以便它可以正常工作。] >
因此,您只能使用一个名为<package_id>.targets
的目标文件,并在其中设置condidtion
来区分要使用的项目环境。
解决方案>>
[1)请将它们全部放入您的<package_id>.targets
文件中:
),则应将属性[[Flag定义为[C0 ]放在<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%
true
文件的末尾,如下所示:xxx.csproj
和
少于1%的项目可以使用。在其他99%的项目中,不应在ThisIsMyRareTarget.exe
中定义Flag属性,它会自动捕获xxx.csproj
。