Использование переменных Msbuild в расширениях проекта - PullRequest
0 голосов
/ 09 января 2019

В настоящее время у меня есть решение с проектом web.api, которое я хочу развернуть в разных виртуальных каталогах в моем локальном IIS. В настоящее время я делаю следующее в .csproj API:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)' == 'CustomerOne.Debug'">
    <CustomerName>CustomerOne</CustomerName>
    ....
</PropertyGroup>
...

Эти переменные в дальнейшем широко используются для преобразований web.config, копирования в другие места и т. Д. Путем ссылки на них как $(CustomerName).

Единственное место, где он не работает, - это определение виртуального каталога, т.е. я хотел бы подключить конфигурацию сборки к IISUrl ниже, который вы можете жестко кодировать:

<ProjectExtensions>
  <VisualStudio>
    <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
      <WebProjectProperties>
        ...
        <IISUrl>http://localhost/api/something</IISUrl>
        ...
      </WebProjectProperties>
    </FlavorProperties>
  </VisualStudio>
</ProjectExtensions>

Замена этого на <IISUrl>http://localhost/api/$(CustomerName)</IISUrl> не работает. Идеи?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете обновить базовый файл проекта. Такая цель в вашем файле проекта сделает это.

  <Target Name="AfterBuild">
    <PropertyGroup>
      <NewUrl>http://localhost/api/$(CustomerName)</NewUrl>
    </PropertyGroup>
    <Message Text="Updating IISUrl: $(NewUrl) in $(MSBuildProjectFile)" />
    <XmlPeek Namespaces="&lt;Namespace Prefix='msb' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;" XmlInputPath="$(MSBuildProjectFile)" Query="/msb:Project/msb:ProjectExtensions/msb:VisualStudio/msb:FlavorProperties/msb:WebProjectProperties/msb:IISUrl/text()">
      <Output TaskParameter="Result" ItemName="Peeked" />
    </XmlPeek>
    <Message Text="Current Url: @(Peeked)" />
    <!-- Only update the IISUrl if its changed -->
    <XmlPoke Condition=" '@(Peeked)'!='$(NewUrl)' " XmlInputPath="$(MSBuildProjectFile)" Namespaces="&lt;Namespace Prefix='msb' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;" Query="/msb:Project/msb:ProjectExtensions/msb:VisualStudio/msb:FlavorProperties/msb:WebProjectProperties/msb:IISUrl" Value="$(NewUrl)" />
  </Target>

Однако у него есть побочные эффекты. Изменение базового файла проекта означает, что Visual Studio решает, что он должен перезагрузить проект.

Чтобы использовать его, вы не можете сразу перейти в Debug. Вместо этого соберите, перезагрузите проект и затем перейдите к отладке. Если вы перейдете непосредственно в Debug (с компиляцией), он будет использовать старый URL.

0 голосов
/ 10 января 2019

Замена на http://localhost/api/$(CustomerName) не работает. Идеи?

Это потому, что Все, что находится внутри элемента ProjectExtensions, будет игнорироваться MSBuild.

Подробную информацию можно получить из этого документа Элемент ProjectExtensions (MSBuild) :

Позволяет файлам проекта MSBuild содержать информацию, не относящуюся к MSBuild. Все, что находится внутри элемента ProjectExtensions, будет игнорироваться MSBuild .

Именно поэтому переменные Msbuild не работают в расширениях проекта.

Надеюсь, это поможет.

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