配置msbuild输出路径

win*_*nce 18 msbuild

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

<MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" />
Run Code Online (Sandbox Code Playgroud)

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

  • 部署\ FOO\foo.exe的
  • 部署\语言环境\ RU-RU\foo.resources.dll
  • 部署\语言环境\ PT-BR\foo.resources.dll

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

Jer*_*ony 29

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

C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe <path_to_project_file> /t:Build /p:OutDir=c:\custom_build_out\;Configuration=PRODUCTION;Platform=x64
Run Code Online (Sandbox Code Playgroud)

注意:

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


Joe*_*lly 6

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

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

您必须在构建步骤之后移动资源文件。我会建议使用Move从任务的MSBuild社区任务

<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)')"/>
Run Code Online (Sandbox Code Playgroud)