응용 프로그램과 WiX 설치 프로그램을 작성하고 subversion을 사용하여 버전을 제어합니다. WiX 설치 프로그램이 빌드되면 버전 번호가 응용 프로그램의 현재 빌드 버전이되기를 원합니다. 어떻게하면 되나요? C #을 사용하여 응용 프로그램을 코딩했습니다.
NB이 프로젝트를 구축하기 위해 ccnet을 사용하고 있습니다
답변
당신은 사용할 수 있습니다 Product/@Version="!(bind.FileVersion.FileId)"
(대체 FileId
에 Id
당신이 버전 번호를 좀하고 싶습니다있는 파일) 및 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 Target
및DefineConstants
.
번들 .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
로컬로 빌드 할 때의 기본값을 제공합니다. 그것이 무엇이든 Version
Wix 에서 변수 가됩니다 . 다음과 같이 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/