Как лучше всего обновить узел XML в MSBuild - PullRequest
5 голосов
/ 02 февраля 2009

Я использую задачи сообщества Tigris для обновления различных ключей AppSettings с помощью задачи XMLUpdate.

Теперь, однако, я хочу добавить узел в раздел system.net для настройки прокси.

Я объявил собственность

<PropertyGroup>
    <proxy>&lt;defaultProxy&gt; &lt;proxy usesystemdefault="False" proxyaddress="http://IPADDRESS:PORT" /&gt; &lt;/defaultProxy&gt;</proxy>
  </PropertyGroup>

и задача XMLUpdate выглядит как

<XmlUpdate
 Prefix="n"
 Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0"
 XmlFileName="$(BuildDir)\Builds\_PublishedWebsites\Presentation\Web.config"
 XPath="/n:configuration/n:system.net"
 Value="$(proxy)"  />

обновляет веб-конфигурацию, однако обновляет непосредственно из группы свойств, т. Е. Не преобразует управляющие символы для угловых скобок У кого-нибудь есть какие-либо идеи?

1 Ответ

7 голосов
/ 03 февраля 2009

Вы можете использовать XmlMassUpdate вместо задачи XmlUpdate.

<ProjectExtensions>
  <defaultProxy>
    <proxy usesystemdefault="False" proxyaddress="http://IPADDRESS:PORT"/>
  </defaultProxy>
</ProjectExtensions>

<Target Name="SubstituteFromWebConfig">
  <XmlMassUpdate 
    NamespaceDefinitions="msb=http://schemas.microsoft.com/developer/msbuild/2003;n=http://schemas.microsoft.com/.NetConfiguration/v2.0"
    ContentFile="$(BuildDir)\Builds\_PublishedWebsites\Presentation\Web.config" 
    ContentRoot="/n:configuration/n:system.net"
    SubstitutionsFile="$(MSBuildProjectFullPath)"
    SubstitutionsRoot="/msb:Project/msb:ProjectExtensions/msb:system.web" />
</Target> 

В этом примере мы заменим узел, указанный ContentRoot в ContentFile на узел, указанный SubstitutionsRoot в SubstitutionsFile (текущий Файл MSBuild).

В этом методе используется элемент MSBuild ProjectExtensions , который позволяет добавить XML в файл проекта , который будет игнорироваться механизмом MSBuild .

(Или, если вы не хотите использовать XmlMassUpdate, вы можете использовать задачу XmlRead на узле в ProjectExtensions и XmlUpdate.)

...