小編輯在這裏,我做了很多,我很快就讀了這個問題,並作出答案,然後重讀這個問題,並認爲我的答案不太適合這個問題,但在這種情況下,我希望它仍然有幫助,也許此處引用的其他資源之一也將有所幫助。
啊我做了這樣的事情,並撞了我的頭撞在牆上了試圖弄明白了一會兒。
問題是您不能在wixlib中使用像$(var.sourceDir)
這樣的變量,然後在項目中使用lib時稍後再更改它。會發生什麼情況是編譯器會在您構建wixlib時用此變量的實際值替換$(var.sourceDir)
。您可以通過打開obj文件並查找使用此目錄的組件或其他東西來驗證這一點,並且看到它具有sourceDir變量的值而不是$(var.sourceDir)
。
爲了解決這個問題,我們將使用bind/wix變量(不確定的術語)在鏈接時進行評估。
This是「如何」,我最終得到了這
幫助我很多,所以,更新您的變量是這樣的!(bindpath。SourceDir)
<Fragment>
<util:RegistrySearchRef Id="MSVCPPRedist_x64_12"/>
<PackageGroup Id="MSVCPPRedist_x64_12">
<ExePackage
Id="MSVCPPRedist_x64_12_0_21005"
Cache="no"
Description="Visual C++ 2013 Redistributable needed for [WixBundleName]"
DetectCondition="MSVCPPRedist_x64_12 OR NOT VersionNT64"
DisplayName="Prerequisite - Visual C++ 2013 Redistributable (x64)"
InstallCommand="/install /quiet /norestart /log vc12log.txt"
PerMachine="yes"
Permanent="yes"
SourceFile="!(bindpath.PrerequisitesDir)VC++\vcredist_x64_12.exe"
UninstallCommand="/uninstall"
Vital="yes"/>
</PackageGroup>
</Fragment>
然後在一些道具文件或生成計算機上的項目文件,您可以包括這樣的事情:
<LinkerAdditionalOptions>-b "PrerequisitesDir=$(PrerequisitesDir)\"</LinkerAdditionalOptions>
凡$(PrerequisitesDir)特性是基於一個相對路徑上設置在像這樣的構建機器上的MSBuild文件(或使用絕對路徑也未嘗不可):
<!-- Directories -->
<PrerequisitesDir>$(MSBuildThisFileDirectory)..\..\..\Installers\Prerequisites\</PrerequisitesDir>
現在,當你建立鏈接階段將使用的編譯時間定義bindPath找到源文件。
關於平臺和配置變量,我認爲你可以使用引用爲!(wix.VariableName)的WixVariables,但是我不確定是否在我頭頂,沒有更多的嘗試自己。您可以查看this answer here以幫助您更好地瞭解不同類型的變量。如果WixVariables不起作用,你可以通過在wixlib文件的hintpath中使用MSBuild屬性$(configuration)等等來構建幾種yoru wixlib風格,並在你自己的wixproj中引用相應的風格。
你有沒有在你的wixproj定義 - <的PropertyGroup> $(DefineConstants); sourcedir = $(sourcedir); compilemode = $(compilemode);平臺= $(平臺) DefineConstants> –