我正在使用msbuild
构建可视化工作室解决方案msbuild.exe my.sln
这样它会将所有内容输出到每个项目中指定的输出路径(默认为bin \),但在这种情况下,我需要将所有输出文件放在不同的文件夹中,用于打包。如果我跑
msbuild.exe my.sln /p:OutputhPath=<someFolder>
然后所有工件都将在指定的文件夹中结束,但结构将是平的。我希望它是:
\package
\project1
\project2
...
但我想不出一个好方法,不修改单个项目文件(这几乎是不可能的)。有任何想法吗? (msbuild 4.0,VS2010 - 如果改变了什么)
答案 0 :(得分:2)
可能有更好的方法,但您可以做的一件事是使用msbuild.exe my.sln
构建,然后将输出复制到\package
目录,以便保持层次结构。它应该很简单。您可以将此作为起点:
<Target Name="Package">
<PropertyGroup>
<SourceFolder>$(MSBuildProjectDirectory)\src</SourceFolder>
<TargetFolder>$(MSBuildProjectDirectory)\package</TargetFolder>
</PropertyGroup>
<ItemGroup>
<FilesToCopy Include="$(SourceFolder)\**\bin\Debug\**\*.*" />
</ItemGroup>
<!-- Recursive copy w/o flattening folder structure: -->
<Copy
SourceFiles="@(FilesToCopy)"
DestinationFiles="@(FilesToCopy->'$(TargetFolder)\%(RecursiveDir)%(Filename)%(Extension)')"
/>
</Target>
您还可以定义属性以跟踪构建配置,并将硬编码的bin\Debug
替换为bin\$(BuildConfig)
。