Msbuild .proj文件中后目标的多个值

Msbuild .proj文件中后目标的多个值,msbuild,proj,Msbuild,Proj,我的一个项目使用Exec Copy命令将文件从一个目录复制到另一个目录。我们间歇性地看到一个问题,其中一个进程正在锁定一个文件,而MsBuild正在尝试对同一个文件执行复制命令。因此,我们面临另一个进程正在使用该文件的错误 我们怀疑这是因为两个不同的元素并行执行。除非第一个完成,否则我们不希望执行第二个。我们可以有两个值作为后构建属性,如下所示 以下是项目:Project1.proj和Project2.proj。我想在Project1中使用Project2中定义的目标。Project1.proj

我的一个项目使用
Exec Copy
命令将文件从一个目录复制到另一个目录。我们间歇性地看到一个问题,其中一个进程正在锁定一个文件,而MsBuild正在尝试对同一个文件执行复制命令。因此,我们面临另一个进程正在使用该文件的错误

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

以下是项目:Project1.proj和Project2.proj。我想在Project1中使用Project2中定义的目标。Project1.proj为Projet2.proj添加了一个参考

Project1.proj

Project2.proj

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

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

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

修改
Project1.目标如下:

<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>
<Project>
    
    
<Target Name="TestTargetAnother" AfterTargets="Build" Condition="'$(Flag)'=='false'">
<Exec Command="xxxxxxxx"/>
<PropertyGroup>
     <Flag>true</Flag>
</PropertyGroup>
</Target>
</Project>
之后,将
Project1.targets
引用到您的
xxx.csproj
文件中:

 <Import Project="Project1.targets" />


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

是否要执行两个目标中的一个,当其中一个执行时,禁用另一个?嗨,om-dev,有关于此问题的更新吗?请检查答案是否有助于您处理此问题?您好@PerryQian MSFT,这些项目文件有多个其他元素,因此我找不到制作它们的方法。以文件为目标并测试您的更改。您可以首先输入项目的csproj文件,然后找到作为参考文件路径的任何导入节点。然后将它们更改为
.targets
。您只需将参考项目文件更改为目标。目标更加规范化,进展如何?