Подтвердить что ты не робот

Настроить выходной путь MSBuild

Существует проект Windows Forms (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
  • развернуть\локали\р-RU\foo.resources.dll
  • развернуть\локали\PT-BR\foo.resources.dll

Есть ли способ настроить MSBuild для копирования файлов EXE и DLL в разные папки?

4b9b3361

Ответ 1

Генерация и копирование файлов ресурсов осуществляется во внутреннем процессе MSBuild во время сборки: GenerateSatelliteAssemblies CopyFilesToOutputDirectory и CopyFilesToOutputDirectory. Они копируются в выходной каталог.

Насколько я знаю, вы не можете изменить это поведение.

Вы должны переместить файлы ресурсов после шага сборки. Я бы посоветовал использовать задачу 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)')"/>

Ответ 2

Используя командную строку 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.