MSBuild переопределить имя выходного файла - PullRequest
2 голосов
/ 20 сентября 2011

Мне нужно иметь возможность переопределить имя выходных сборок.

Существует файл, содержащий префикс appid.Мне нужно прочитать файл, чтобы получить этот префикс, а затем использовать его в качестве имени сборки.Т.е. имя сборки engine.dll и appid содержит slot_113.Окончательный вывод должен быть engine_slot113.dll.

Я собираюсь создать отдельный файл .targets, который я могу включить в любой файл .csproj, требующий такого поведения.

Я нашел задачу ReadFileLines для чтения файла, содержащего appid, но я не уверен, как переопределить имя вывода.

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Вы можете легко достичь этого, используя MSBuild Copy Task . Предположим, вы уже извлекли суффикс в свойстве $(AssemblyNameSuffix) и указали группу элементов файлов сборки @(AssemblyDllFiles), поэтому:

  1. Создать RenameDlls.targets файл (содержимое которого показано ниже)
  2. Создать testfile.txt вместе с целевым файлом
  3. Выполнить msbuild.exe RenameDlls.targets
  4. Файл testfile.txt будет скопирован как testfile_SUFFIX.txt

Примечание. Это действие можно применить и к нескольким файлам


MSBuild цели:

<?xml version="1.0" encoding="utf-8"?>

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Default">

    <Target Name="Default" DependsOnTargets="CreateItems;CopyItems"/>

    <PropertyGroup>         
                <AssemblyNameSuffix>SUFFIX</AssemblyNameSuffix>
    </PropertyGroup>

    <Target Name="CreateItems">
        <ItemGroup>
            <AssemblyDllFiles Include="testfile.txt"/>
        </ItemGroup>
    </Target>

    <Target Name="CopyItems" 
            Inputs="@(AssemblyDllFiles)" 
            Outputs="@(AssemblyDllFiles->'.\%(RecursiveDir)%(Filename)_$(AssemblyNameSuffix)%(Extension)')">
           <Message Text="@(AssemblyDllFiles->'%(FullPath)', '%0a%0d')" 
                    Importance="low"/>

        <Copy SourceFiles="@(AssemblyDllFiles)" 
              DestinationFiles="@(AssemblyDllFiles->'.\%(RecursiveDir)%(Filename)_$(AssemblyNameSuffix)%(Extension)')" 
              SkipUnchangedFiles="true"/>
    </Target>
</Project>
1 голос
/ 20 сентября 2011

Я не думаю, что есть способ переопределить его, но при переименовании после операции это должно быть очень возможно.Используйте PostBuildEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...