[英]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.