25

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

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

它将 foo.exe 和所有本地化的 DLL 文件复制到该deploy\foo文件夹​​,但我需要将本地化的 DLL 文件复制到一个单独的文件夹中。它应该是:

  • 部署\foo\foo.exe
  • deploy\locales\ru-RU\foo.resources.dll
  • deploy\locales\pt-BR\foo.resources.dll

有没有办法配置 MSBuild 将 EXE 和 DLL 文件复制到不同的文件夹?

4

2 回答 2

49

使用 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

笔记:

  1. 如果更改OutDir为 /p 指定属性的顺序,这将不起作用。
  2. OutDir属性用于指定备用目录的完整路径。OutputPath是相对目录。
  3. 它必须在自定义构建输出路径中有一个项目名称 + 构建配置名称,因为 MSBuild 不会将这些内容附加到OutDir.
于 2014-10-21T00:20:45.390 回答
6

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

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

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

<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)')"/>
于 2013-10-29T09:56:14.600 回答