[C#] WiX 설치 프로그램 버전을 현재 빌드 버전으로 설정하려면 어떻게해야합니까?

응용 프로그램과 WiX 설치 프로그램을 작성하고 subversion을 사용하여 버전을 제어합니다. WiX 설치 프로그램이 빌드되면 버전 번호가 응용 프로그램의 현재 빌드 버전이되기를 원합니다. 어떻게하면 되나요? C #을 사용하여 응용 프로그램을 코딩했습니다.

NB이 프로젝트를 구축하기 위해 ccnet을 사용하고 있습니다



답변

당신은 사용할 수 있습니다 Product/@Version="!(bind.FileVersion.FileId)"(대체 FileIdId당신이 버전 번호를 좀하고 싶습니다있는 파일) 및 light.exe는이 참조하는 파일의 버전 값을 채 웁니다 FileId.


답변

내 프로젝트 중 하나에서 실행 파일에서 파일 버전을 읽을 수있는 전 처리기 확장을 작성 하여이 작업을 수행했습니다. WiX 파일은 다음과 같습니다.

<?define ProductName="$(fileVersion.ProductName($(var.MyApp.TargetPath)))" ?>
<?define CompanyName="$(fileVersion.CompanyName($(var.MyApp.TargetPath)))" ?>
<?define ProductVersion="$(fileVersion.ProductVersion($(var.MyApp.TargetPath)))" ?>
<Product
    Id="<product ID>"
    Name="$(var.ProductName)"
    Version="$(var.ProductVersion)"
    Manufacturer="$(var.CompanyName)"
    Language="1033"
    UpgradeCode="<upgrade code>">

CodePlex에 대한 코드를 게시했습니다 : http://wixfileversionext.codeplex.com/


답변

누군가가 실제 XML 예제를 찾고 있다면 이것은 .NET 어셈블리에서 작동하며 Assembly 또는 KeyPath 속성을 수행하지 않아도됩니다. […] 자리 표시 자와 관련없는 코드를 제거했습니다.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product [...] Version="!(bind.fileVersion.MyDLL)">
        [...]
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Id="INSTALLDIR" Name="MyDLLInstallLocation">
                    <Component Id="MainLib" Guid="[...]">
                        <File Id="MyDLL" Name="MyDll.dll" Source="MyDll.dll" />
                        [...]
                    </Component>
                    [...]
                </Directory>
            </Directory>
        </Directory>
    </Product>
</Wix>


답변

여기에 귀하의 부트 스트 래퍼 번들 버전을 사용하여 MyApp를 AssemblyVersion 일치하도록 얻을 수있는 매우 간단한 방법이다 BeforeBuild TargetDefineConstants .

번들 .xx :

<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>


답변

응용 프로그램의 빌드 스크립트에 전달할 수있는 것과 동일하게 버전을 설치 프로젝트의 MSBuild 스크립트에 전달할 수 있습니다.

예를 들어 CI 시스템이 변수 및를 정의 AppVersion하고 BuildNumber이를 MSBuild 스크립트로 전달하면 wixproj는 Version다음과 같이 Wix에 전달 하는 해당 특성을 작성할 수 있습니다 .

<PropertyGroup>
    <Version Condition=" '$(BuildNumber)' == '' ">0.0.1</Version>
    <Version Condition=" '$(BuildNumber)' != '' ">$(AppVersion).$(BuildNumber)</Version>
    <DefineConstants>Version=$(Version)</DefineConstants>
</PropertyGroup>

첫 번째 정의는 Version로컬로 빌드 할 때의 기본값을 제공합니다. 그것이 무엇이든 VersionWix 에서 변수 가됩니다 . 다음과 같이 wsx 파일에서 사용하십시오.

<Product Version="$(var.Version)" ...>
    <Package Description="$(var.ProductName) $(var.Version): $(var.ProductDescription)" ... />

설명에 버전을 포함시켜 파일 이름과 상관없이 창 탐색기 (세부 사항보기 또는 속성 페이지의 열)에서 쉽게 찾을 수 있습니다.

버전을 변수로 전달하면 파일에서 읽는 것보다 더 많은 제어가 가능합니다. 파일을 읽으면 프로그램 버전의 4 개 부분이 모두 제공됩니다. 그러나 ProductVersion 은 처음 3 개 부분 만 사용하도록 설계되었습니다.


답변

이것은 당신이 성취하려고하는 것에 합리적으로 보입니다. 크루즈 컨트롤에 해당하는 것이 무엇인지 확인하십시오.

http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/


답변