.proj文件中AfterTargets的多个值



我的一个项目有Exec Copy命令,可以将文件从一个目录复制到另一个目录。我们偶尔会看到一个问题,其中一个进程正在锁定一个文件,而MsBuild正试图对同一个文件执行复制命令。因此,我们面临着另一个进程正在使用该文件的错误。

我们怀疑这是因为两个不同的元素并行执行。除非第一个完成,否则我们不希望第二个执行。我们可以为AfterBuild属性设置两个值吗,如下所示。

以下是项目:Project1.proj和Project2.proj。我想将Project2中定义的目标用于Project1。项目1.proj为项目2.proj 添加了参考

Project1.proj

<Target Name="TestTarget" AfterTargets="Build;TestTargetAnother" > ..... ..... </Target>

Project2.proj

<Target Name="TestTargetAnother" AfterTargets="Build" > ..... ..... </Target>

我们怀疑这是因为两个不同的元素并行执行。除非第一个完成,否则我们不希望第二个要执行的。

首先,将两个文件重命名为Project1.targetsProject2.targets

后缀为proj的文件不能在其他引用文件中使用。带有此后缀的文件无法传输属性。

修改Project1.targets如下:

<Project>
<PropertyGroup>
<Flag>false</Flag>
</PropertyGroup>

<Target Name="TestTarget" AfterTargets="Build;TestTargetAnother" Condition="'$(Flag)'=='false'">
<Exec Command="xxxxxxxxxxx"/>
<PropertyGroup>
<Flag>true</Flag>
</PropertyGroup>
</Target>
<Import Project="Project2.targets"/>
</Project>

然后,像这样修改Project2.targets

<Project>


<Target Name="TestTargetAnother" AfterTargets="Build" Condition="'$(Flag)'=='false'">
<Exec Command="xxxxxxxx"/>
<PropertyGroup>
<Flag>true</Flag>
</PropertyGroup>
</Target>
</Project>

之后,在xxx.csproj文件中引用Project1.targets

<Import Project="Project1.targets" />

因此它将执行其中一个并取消另一个。

最新更新