0

次の xml の <DefineConstants> ノードの ProductVersion の値を置き換えたいと思います。ラインの残りの部分は保持する必要があります。例:

<DefineConstants>XXXXX;ProductVersion=20.323.23;YYYYY</DefineConstants>

<DefineConstants>XXXXX;ProductVersion=21.58.44;YYYYY</DefineConstants>

を試してみましたreplaceregexpが、残りの内容が変わります。

<replaceregexp file="${basedir}\Installer.wixproj"
     match="ProductVersion=([0-9].*);(.*)"
     replace="ProductVersion=${SpaceVersion};\1"
     byline="true"
/>

これで私が間違っていることを教えてもらえますか。

XML:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
      <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
      <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
      <ProductVersion>3.5</ProductVersion>
      <ProjectGuid>{6bc0a85b-9c15-41e6-874b-5fe07e5338e6}</ProjectGuid>
      <SchemaVersion>2.0</SchemaVersion>
      <OutputName>Installer</OutputName>
      <OutputType>Package</OutputType>
      <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
      <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
      <OutputPath>bin\$(Configuration)\</OutputPath>
      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
      <DefineConstants>Debug;</DefineConstants>
      <WixVariables>
      </WixVariables>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
      <OutputPath>bin\$(Configuration)\</OutputPath>
      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
      <DefineConstants>SourceDir=$(SolutionDir)XSSE\;ProductVersion=3.3.1.75;ProductName=XSSE;ToolchinShortcut=XSSEToolchinShortcut;ExtensionDir=XSSE;ManifestFileName=extension.vsixmanifest;PkageDefFileName=XSSE.ToolchainProvider.pkgdef;REGKEY=Software\Microsoft\XSSE;</DefineConstants>
      <WixVariables>XYZ=123;</WixVariables>
   </PropertyGroup>
   <ItemGroup>
      <Compile Include="filefragment.wxs" />
      <Compile Include="Product.wxs" />
   </ItemGroup>
   <ItemGroup>
      <WixExtension Include="WixUIExtension">
         <HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
         <Name>WixUIExtension</Name>
      </WixExtension>
   </ItemGroup>
   <Import Project="$(WixTargetsPath)" /> 

4

2 に答える 2

1

製品版以降の行の残りをキャプチャしようとする必要はないと思います。

それについて心配する必要はありません。正規表現が残りのテキストをそのままにしている場合は、ProductVersion のみを置き換えることができます。

私はこれで成功しました:

<replaceregexp file="${basedir}\Installer.wixproj"
    match="ProductVersion=[0-9]+\.?[0-9]+\.?[0-9]+\.?[0-9]+\.?;"
    replace="ProductVersion=${SpaceVersion};"
    byline="true"
    />
于 2012-06-11T09:32:30.483 に答える
0

\2の代わりに使用する必要があります\1

<replaceregexp file="${basedir}\Installer.wixproj"
       match="ProductVersion=([0-9].*);(.*)"
       replace="ProductVersion=${SpaceVersion};\2"
       byline="true"
        />

スタンドアロン テスト:

<project default="test">

    <property name="SpaceVersion" value="a.b.c"/>

    <target name="test">
      <replaceregexp file="test.xml"
         match="ProductVersion=([0-9].*);(.*)"
         replace="ProductVersion=${SpaceVersion};\2"
         byline="true"
       />
    </target>
</project>

変更されたファイルと元のファイルの比較:

$diff test.xml test.xml.0
2c2
<     <DefineConstants>XXXXX;ProductVersion=a.b.c;YYYYY</DefineConstants>
---
>     <DefineConstants>XXXXX;ProductVersion=20.323.23;YYYYY</DefineConstants>
于 2012-06-11T09:30:31.307 に答える