2017-07-27 78 views
0

我有一個使用引導程序來啓動我的MSI文件維克斯安裝程序。我通過在我的wix項目中調用批處理文件作爲後期構建事件來完成此任務。然後手動調用蠟燭和光源,並將各種變量傳遞到Bundle.wxs文件中。這一切工作,併產生叫我的MSI文件exe文件..維克斯引導程序 - 設置版本號捆綁

不過,我現在想的MSI BuildVersion傳遞到包文件。在創建msi的wxs文件中,我使用BuildBuilder部分中的BuildVersion,使用BuildVersion =%(AssemblyVersion.Version)。

我不能不管我嘗試訪問該變量,以便將其傳遞給我的build_bootstrapper.bat文件。但是我可以傳入硬編碼值。我目前正在建立自己的AssemblyVersionNumber enviornment變量,你可以在AfterBuild部分見下圖:

<AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">$(BuildVersion)</AssemblyVersionNumber> 

,但它是由它獲取我的腳本文件時(即使如果硬編碼它的人口)爲空。我已經嘗試了一切。

有誰知道我如何能得到%(AssemblyVersion.Version)任何想法;從後構建步驟到我的命令文件?

在此先感謝

<Target Name="BeforeBuild"> 
    <GetAssemblyIdentity AssemblyFiles="..\..\App\AppThing\bin\Release\AppThing.exe"> 
     <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
    </GetAssemblyIdentity> 
    <PropertyGroup> 
     <DefineConstants>BuildVersion=%(AssemblyVersion.Version);</DefineConstants> 
    </PropertyGroup> 
    </Target> 
    <Target Name="AfterBuild"> 
    <PropertyGroup> 
     <DefineConstants>BuildVersion=%(AssemblyVersion.Version);</DefineConstants> 
     <AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">$(BuildVersion)</AssemblyVersionNumber> 
    </PropertyGroup> 
    </Target> 
    <PropertyGroup> 
    <PreBuildEvent>$(ProjectDir)scripts\copy_services.bat $(SolutionDir) $(ProjectDir)</PreBuildEvent> 
    </PropertyGroup> 
    <Target Name="AfterClean"> 
    <Message Text="Cleaning wix files, TargetDir is: $(TargetDir)" Importance="High" ContinueOnError="true" /> 
    <CreateItem Include="$(TargetDir)\**\*.*"> 
     <Output TaskParameter="Include" ItemName="BinFilesDir" /> 
    </CreateItem> 
    <Delete Files="@(BinFilesDir)" /> 
    </Target>  
    <PropertyGroup> 
    <PostBuildEvent>$(ProjectDir)scripts\build_bootstrapper.bat $(ProjectDir) $(ConfigurationName) $(AssemblyVersionNumber)</PostBuildEvent> 
    </PropertyGroup> 

回答

1

$(BuildVersion)未設置任何東西。

您正在將常量設置爲「BuildVersion =%(AssemblyVersion.Version)」,但從未實際定義名爲「BuildVersion」的MSBuild屬性,因此$(BuildVersion)的值爲「」。

使用%(AssemblyVersion.Version)。

<AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">%(AssemblyVersion.Version)</AssemblyVersionNumber> 
+0

嗨,非常感謝您的回覆。 恐怕我已經試過了。這似乎是使用%(AssemblyVersion.Version)的一個特別問題。的2條線以下結果: 1:空字符串 %(AssemblyVersion.Version) 2:項目目錄。 $(ProjectDir) 我可以訪問和存儲一些變量,但不是程序集版本號! 任何想法? 謝謝 – Yos

+1

嗯,你可以在beforebuild目標的屬性組中嘗試執行'%(AssemblyVersion.Version)',然後在AssemblyVersionNumber的定義中再次使用'$(BuildNumber)'。可能是因爲來自另一個目標中的GetAssemblyIdentity目標的輸出項目僅具有該目標的範圍。更重要的是,剛剛轉會'%(AssemblyVersion.Version)'到您的BeforeBuild目標的的PropertyGroup –

+0

嗨。無論如何,我也嘗試過,但非常感謝你。 我實際上剛剛恢復調用一個簡單的C#應用​​程序來檢索給定的exe的程序集版本號。然後我從我的後期構建步驟調用的批處理文件中調用該方法。然後,我可以使用它傳遞給wix包,一切都很好。我以前試圖避免這一點。 謝謝你的回覆。我會投票給它,但不能真正接受它,因爲它可能會誤導別人,我希望對你沒有問題。 – Yos