3

msbuild スクリプトでファイルに対して正規表現を実行して、Visual Studio セットアップ プロジェクト内に保持されている ProductName を置き換えようとしています。正規表現の置換を行うには、msbuild 拡張パック、特にそのファイル タスクを使用しようとしています。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 (またはその他のもの) で正規表現を更新した人はいますか?

4

1 に答える 1

4

私はこれと同じ問題を抱えていて、いくつかのことを試した後、これを機能させました...

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

これにより、ProductVersion 文字列が、Solution.DeploymentProject 変数にあるバージョンに置き換えられます。

CDATAをいじる必要はまったくないと思います。

于 2011-10-13T06:04:12.590 に答える