我有一个 VS 解决方案,其中包含一些要与共享库一起发布的应用程序和公共 API。我在制作这样的 msbuild 文件方面有一些浅薄的经验。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TPath>C:\Program Files (x86)\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</TPath>
<ETPath>C:\Program Files (x86)\MSBuild\ExtensionPack\4.0\</ETPath>
</PropertyGroup>
<ItemDefinitionGroup />
<ItemGroup>
<SolutionFile Include="MyApplications.sln" />
</ItemGroup>
<Target Name="Build" Outputs="@(CollectedBuildOutput)">
<MSBuild Projects="@(SolutionFile)" Targets="Rebuild" BuildInParallel="True"
Properties="BuildingSolutionFile=true; Configuration=$(Configuration); Platform=$(Platform); TargetFrameworkVersion=$(TargetFrameworkVersion); WarningLevel=3"
SkipNonexistentProjects="%(ProjectReference.SkipNonexistentProjects)">
<Output TaskParameter="TargetOutputs" ItemName="CollectedBuildOutput"/>
</MSBuild>
</Target>
</Project>
然后我跑
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MyProjects.msbuild /p:outdir=C:\VSProjectsRelease\MyApplications\Release\
所以所有的程序集都将进入同一个目录。到目前为止,一切都很好。但是,如果我想为每个应用程序压缩文件,或者为 Wix 设置项目收集文件,就会出现问题。
例如,在 MyApplications.sln 中,我有 10 个项目,其中 3 个是应用程序,分别是 AppA、AppB 和 AppC。
我想运行一个 msbuild 文件,该文件将创建 3 个应用程序文件夹,并将程序集复制到那里而无需显式定义依赖关系,因为 Sln 和 csproj 文件已经具备相关知识。我希望 msbuild 每个项目只构建一次。这个怎么做?