簡體   English   中英

msbuild其他項目並將輸出復制到當前項目

[英]msbuild other projects and copy output to current project

這是我的代碼:

<ItemGroup>
    <ProjectsToBuild Include="$(ProjectDir)..\proj1.jsproj"/>
    <ProjectsToBuild Include="$(ProjectDir)..\proj2.jsproj"/>
    <!-- ... -->
  </ItemGroup>
  <PropertyGroup>
    <Config>Release</Config>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <Config>Debug</Config>
  </PropertyGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectsToBuild)" 
          ContinueOnError ="false"
          Properties="Configuration=@(Config)">
          <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
        </MSBuild>
        <!-- Need to copy single generated js file in each projects to current project (ie:mainProj\autogenerated folder) -->
    </Target>

因此,proj1.jsproj生成proj1.js單個文件,proj2.jsproj生成proj2.js單個文件,...

然后,我需要將這些文件復制到:

$(PROJECTDIR)\\自動生成\\ proj1 \\ proj1.js

$(PROJECTDIR)\\自動生成\\ proj2 \\ proj2.js

...

在此先感謝您的幫助。

這可以通過多種方式來實現,這是一種使用元數據聲明目標目錄,將構建和復制合並到一個目標並在調用該目標的ItemGroup上循環的一種方式:

<ItemGroup>
  <ProjectsToBuild Include="$(ProjectDir)..\proj1.jsproj">
    <DestDir>proj1</DestDir>
  </ProjectsToBuild>
  <ProjectsToBuild Include="$(ProjectDir)..\proj2.jsproj">
    <DestDir>proj2</DestDir>
  </ProjectsToBuild>
</ItemGroup>

<Target Name="Build">
  <MSBuild Projects="$(MsBuildThisFile)" Targets="BuildAndCopy"
    Properties="ProjectToBuild=%(ProjectsToBuild.Identity);
                DestDir=$(ProjectDir)\autogenerated\%(ProjectsToBuild.DestDir)" />
</Target>

<Target Name="BuildAndCopy">
  <MSBuild Projects="$(ProjectToBuild)" Targets="Build" >
    <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
  </MSBuild>
  <Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(DestDir)"/>
</Target>

現在,如果您的項目真的是這樣命名的,那么目錄結構就可以簡化了:每個項目唯一不同的部分是名稱,因此您可以簡單地使用

<ItemGroup>
  <ProjectsToBuild Include="proj1">
  <ProjectsToBuild Include="proj2">
</ItemGroup>

然后從中得出所有其他路徑。

另一種方法是在每個項目中導入一個通用的MsBuild文件,並使該通用文件聲明一個postbuild事件,以將$(OutputFile)復制到$(ProjectDir)\\ autogenic \\ $(ProjectName)\\ $(OutputFile)或類似的東西; 我對js項目不熟悉,因此名稱可能是錯誤的,但是您明白了。 這消除了僅用於構建項目的額外MsBuild文件的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM