结构解决方案outputpath按项目

时间:2012-02-10 17:11:57

标签: msbuild projects-and-solutions

我正在使用msbuild

构建可视化工作室解决方案
msbuild.exe my.sln

这样它会将所有内容输出到每个项目中指定的输出路径(默认为bin \),但在这种情况下,我需要将所有输出文件放在不同的文件夹中,用于打包。如果我跑

msbuild.exe my.sln /p:OutputhPath=<someFolder>

然后所有工件都将在指定的文件夹中结束,但结构将是平的。我希望它是:

\package
    \project1
    \project2
    ...

但我想不出一个好方法,不修改单个项目文件(这几乎是不可能的)。有任何想法吗? (msbuild 4.0,VS2010 - 如果改变了什么)

1 个答案:

答案 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)