8

Bootstrapper をビルドするときに、MyApp と Bootstrapper の両方のバージョンが自動的にインクリメントされて同期されるように、自動バージョン管理を実装しようとしています。そうしないと、バージョンが一致するインストールを試行するたびに、プログラムの追加と削除でブートストラップ エントリが重複してしまうことになります。

ブートストラップをビルドすると、AfterBuild ターゲットを使用GetAssemblyIdentityして自動生成されたバージョンの MyApp が正常に取得され、ブートストラップの出力ファイルはバージョン番号が増分された適切な名前になります。MyApp.1.0.5123.1352.exe

しかし、この Bootstrapper をインストールすると、プログラムの追加と削除に表示されるバージョンは常に1.0.0.0.

Bootstrapper Bundle Version フィールドでバインディングを使用しようとしましたが、MyApp バージョンを読み取ることができません。

を使用!(bind.packageVersion.MyApp)すると、1.0.0.0 がインクリメントされることはありません。
使用!(bind.assemblyName.MyApp)すると、ビルド エラーが発生します (未解決のバインド時間変数)。
使用!(bind.FileVersion.filAAF013CA9B89B07C81031AE69884BF11)すると、ビルド エラーが発生します (未解決のバインド時間変数)。<-- FileID がSetupプロジェクトに存在し、これがプロジェクトであるため、意味がありBootstrapperます。

パッケージ化する MyApp と同じバージョンの Bootstrapper Bundle を取得するにはどうすればよいですか?

=====MyApp\AssemblyInfo.cs=====

[assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyFileVersion("1.0.*")] 

=====Setup.wixproj=====

<Target Name="BeforeBuild">
  <PropertyGroup>
    <LinkerBaseInputPaths>..\MyApp\bin\$(Configuration)\</LinkerBaseInputPaths>
  </PropertyGroup>
  <HeatDirectory OutputFile="MyApp_Files.wxs" Directory="..\MyApp\bin\$(Configuration)\" DirectoryRefId="INSTALLLOCATION" ComponentGroupName="MyApp_Project" SuppressCom="true" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" AutoGenerateGuids="false" GenerateGuidsNow="true" ToolPath="$(WixToolPath)" Condition="'%(ProjectReference.PackageThisProject)'=='True'" />
</Target>

=====Bootstrapper.wixproj=====

<Target Name="AfterBuild">
    <GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe">
        <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
    </GetAssemblyIdentity>
    <Copy SourceFiles=".\bin\$(Configuration)\$(OutputName).exe" DestinationFiles=".\bin\$(Configuration)\MyApp.%(AssemblyVersion.Version).exe" />
    <Delete Files=".\bin\$(Configuration)\$(OutputName).exe" />
</Target>

=====ブートストラップ\Bundle.wxs=====

<Bundle Name="$(var.ProductName) Bootstrapper v!(bind.packageVersion.MyApp)" 
        Version="!(bind.packageVersion.MyApp)"
4

2 に答える 2

7

とった!!!ターゲットDefineConstantsで別名変数を宣言できることに気づきませんでした。BeforeBuild

以下は、変数を生成する BeforeBuild ターゲットの例です。BuildVersion

Bundle.wx:

<Bundle Name="$(var.ProductName) Bootstrapper v$(var.BuildVersion)"
        Version="$(var.BuildVersion)"

Bootstrapper.wixproj:

  <Target Name="BeforeBuild">
    <GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
    </GetAssemblyIdentity>
    <PropertyGroup>
      <DefineConstants>BuildVersion=%(AssemblyVersion.Version)</DefineConstants>
    </PropertyGroup>
  </Target>
  <!-- This is extra, not needed: Renames output file with version number -->
  <Target Name="AfterBuild">
    <GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
    </GetAssemblyIdentity>
    <Copy SourceFiles=".\bin\$(Configuration)\$(OutputName).exe" DestinationFiles=".\bin\$(Configuration)\MyApp.%(AssemblyVersion.Version).exe" />
    <Delete Files=".\bin\$(Configuration)\$(OutputName).exe" />
  </Target>
于 2013-09-25T21:51:48.377 に答える