использование MSBuild.ExtensionPack.FileSystem.File Заменить на vdproj - PullRequest
3 голосов
/ 12 апреля 2011

Я пытаюсь заменить ProductName, хранящийся в проекте установки Visual Studio, выполнив регулярное выражение для файла в моем сценарии msbuild. Для замены regEx я пытаюсь использовать пакет расширений msbuild и, в частности, задачу File. Цель внутри моего скрипта msbuild выглядит так:

<Target Name="CustomiseMsi">
<PropertyGroup>
  <RegExPattern>
    <![CDATA[(?:\""ProductName\"" = \""8:.*)]]>
  </RegExPattern>
  <RegExReplacement>
    <![CDATA["\"ProductName\" = \"8:MyApp v1.0\""]]>
  </RegExReplacement>
  <RegExOutput></RegExOutput>
</PropertyGroup>

<MSBuild.ExtensionPack.FileSystem.File
  TaskAction="Replace"
  RegexPattern="$(RegExPattern)"
  Replacement="$(RegExReplacement)"
  Files="@(AbsolutePathToVdProjToParse)">
</MSBuild.ExtensionPack.FileSystem.File></Target>

Когда эта цель запускается, я получаю следующий вывод, но файл остается неизменным.

CustomiseMsi:
  Processing File Collection
Processing File: C:\pathHere\mySetup.vdproj

Я иду по этому правильному пути? Кто-нибудь делал регулярные выражения, обновленные на vdproj (или что-нибудь еще) таким образом?

1 Ответ

4 голосов
/ 13 октября 2011

У меня была такая же проблема, и после нескольких попыток я заставил это работать ...

<MSBuild.ExtensionPack.FileSystem.File TaskAction="Replace" 
    TextEncoding="ASCII"  RegexPattern='"ProductVersion" = "8:.*"' 
    Replacement='"ProductVersion" = "8:$(Version)"' 
    Files="%(Solution.DeploymentProject)"/>

Это просто заменит строку ProductVersion версией, которую я имею в моем Solution.DeploymentProjectпеременная.

Не думаю, что вам вообще нужно связываться с CDATA.

...