Настроить выходной путь 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 в разные папки?
Ответы
Ответ 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
Замечания:
- Если вы измените порядок указания свойства
OutDir
для /p, это не сработает. - Свойство
OutDir
предназначено для указания полного пути к альтернативному каталогу. OutputPath
для относительного каталога. - У него должно быть имя проекта + имя конфигурации сборки в пути вывода пользовательской сборки, поскольку MSBuild не добавляет эти вещи в
OutDir
.