Используя MSBuild 4.0, как передать имя свойства для расширения в файле проекта c # из задачи MSBuild? - PullRequest
3 голосов
/ 13 сентября 2011

Я создал сценарий MSBuild для нашего процесса CI, и в этом сценарии я использую задачу MSBuild для компиляции решения:

<PropertyGroup>
    <MyOutPath>Output</MyOutPath>
</PropertyGroup>

<MSBuild
    Projects="MySolution.sln"
    Targets="Clean;Rebuild"
    Properties="OutputPath=$(MyOutPath)\%24(AssemblyName)">
</MSBuild>

Я хочу, чтобы в файлах проекта c # использовался путь вывода, например

  • Выходные данные \ MyAssemblyName1 для проекта MyAssemblyName1
  • Вывод \ MyAssemblyName2 для проекта MyAssemblyName2

Свойство AssemblyName взято из файла проекта C #, и я хочу, чтобы оно было раскрыто в свойстве OutputPath при построении проекта.

Сейчас% 24 (AssemblyName) просто создает Output \ $ (AssemblyName) в файловой системе, а это не то, что мне нужно.

Не удивительно, что использование $ (AssemblyName) расширяется до нуля в «родительском» файле MSBuild.

Есть ли способ отложить разрешение свойства AssemblyName позже в файле целевого проекта?

Кроме того, я не хочу изменять файл .csproj, так как я хочу наименьшего воздействия от системы CI.

1 Ответ

3 голосов
/ 14 сентября 2011

Вы можете импортировать файл проекта .csproj непосредственно в ваш скрипт MSBuild, используя элемент Import . Таким образом, вы можете ссылаться на свойство AssemblyName напрямую:

<Import Project="MyProject.csproj" />
<Message Text="The assembly name is $(AssemblyName)" />

Если вам необходимо импортировать содержимое файла решения .sln, сначала вам нужно преобразовать его в файл проекта MSBuild , задав для переменной среды MSBuildEmitSolution значение 1 запустите MSBuild для файла решения. Это создаст файл MySolution.sln.proj, который вы затем сможете импортировать в ваш скрипт, как описано выше:

<SetEnv Name="MSBuildEmitSolution" Value="1" />
<MSBuild Projects="MySolution.sln" Targets="Build" />
<Import Project="MySolution.sln.proj" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...