配置msbuild输出路径

时间:2013-10-28 11:25:53

标签: msbuild

有一个带有本地化资源文件的winforms(NET 3.5)项目foo.csproj。我使用msbuild来构建项目并创建部署结构。

<MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" />

它复制foo.exe和所有本地化的dll来部署\ foo文件夹,但我需要将本地化的dll复制到单独的文件夹中,它应该是:

  • 部署\ FOO \ foo.exe的
  • 部署\区域设置\ RU-RU \ foo.resources.dll
  • 部署\区域设置\ PT-BR \ foo.resources.dll

有没有办法配置msbuild将exe和dll复制到不同的文件夹?

2 个答案:

答案 0 :(得分:26)

使用MSBuild命令行,您可以指定输出路径,如下所示;


C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe  /t:Build /p:OutDir=c:\custom_build_out\;Configuration=PRODUCTION;Platform=x64

注意:

  1. 如果更改为/ p指定OutDir属性的顺序,则不起作用。
  2. OutDir属性用于指定备用目录的完整路径。 OutputPath用于相对目录。
  3. 它是自定义构建输出路径中的项目名称+构建配置名称,因为msbuild不会将这些内容附加到OutDir。

答案 1 :(得分:3)

资源文件生成和复制在构建期间在内部MSBuild进程中完成:GenerateSatelliteAssembliesCopyFilesToOutputDirectory。它们将复制到输出目录中。

据我所知,您无法修改此行为。

您必须在构建步骤后移动资源文件。我建议您使用MSBuild community tasks中的Move任务。

<MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" />

<CreateItem Include="..\deploy\foo\**\*.resources.dll">
    <Output TaskParameter="Include" ItemName="ResourcesToMove" />
</CreateItem>

<Move SourceFiles="@(ResourcesToMove)" DestinationFiles="@(ResourcesToMove->'..\deploy\locales\%(RecursiveDir)\%(Filename)%(Extension)')"/>