2014-02-10 57 views
0

我正在使用Wix Toolset 3.8 Visual Studio加載項。我已經創建了一個WIX安裝程序庫,它封裝了將由各種服務部署項目使用的一些通用組件。該庫包含對需要打包到每個部署中的幾個解決方案文件的引用。如何維護WIX設置庫中的文件參考完整性

generic WIX Setup Library Project with solution file references

這些依賴於我的WiX的文庫片段用在幾個不同的方式。例如:

<Binary Id="InstallationScript" SourceFile=".\Dependency1.vbs" /> 
<CustomAction Id="DependencyAction" 
       BinaryKey="InstallationScript" 
       VBScriptCall="" 
       Execute="deferred" 
       Return="check" 
       HideTarget="no"/> 
<Component Id="DLL_Component" Guid="4745D9E2-0EBA-EE57-D8DB-677ADA9E9EC8"> 
    <File Id="DLL1" Name="Dependency1.DLL" Source=".\Dependency1.dll" Vital="yes" KeyPath="yes" DiskId="1"/> 
</Component> 

的維克斯設置圖書館建立精細是否我將文件添加到該項目爲紐帶,或將它們複製到項目目錄,以及我是否引用它們在項目目錄,或使用相對路徑他們的原始位置。當我爲我的服務部署在我的WIX安裝項目中包含片段時,問題就出現了。

It would be shameful to include every solution file in the Setup Project directly.

<Custom Action="DependencyAction" Before="InstallFinalize"> 
    NOT INSTALLED AND NOT UPGRADINGPRODUCTCODE 
</Custom> 

安裝項目是不是在文件夾結構相同的相對深度,從而從維克斯庫引用時它的相對路徑沒有指向同一個地方。當我參考WIX庫中的動作或功能時,出現錯誤,如The system cannot fine the file '.\Dependency1.dll'正在按照原樣讀取XML,並從Setup Project位置而不是從Library Project位置引用XML,因此相對目錄錯誤。我可以將WIX庫中的相對路徑設置爲使用它的Setup Project的相對路徑,或者我也可以將解決方案文件複製到Setup Project目錄中,但當然,這完全違背了使用常見的WIX庫。還有其他服務部署項目需要使用此庫。

所以問題是,無論安裝項目所在的目錄如何,我都可以使用WIX庫中的解決方案文件的方式來使用安裝項目。

回答

4

創建一個包含創作中引用的文件的二進制文件.wixlib。 (這是-bf在命令行中,.wixproj中的BindFiles屬性,「在Votive中將文件綁定到庫文件中」複選框。)

+0

啊...我找到了「將文件綁定到庫文件」複選框Build選項卡的底部,看到它將BindFiles和LibBindFiles屬性添加到項目文件中,並發現Votive = Visual Studio加載項。這種聯繫正如我現在所期望的那樣工作。 .wixlib較大,表示文件被綁定在裏面。更重要的是,Source參考僅在構建.wixlib時相關。當相關項目引用功能,組件或操作時,無論此項目的相對位置如何,它們都會自動鏈接。 –

+0

對於其他可能有同樣問題的人......我發現項目屬性「構建選項卡」不一致地顯示「將文件綁定到庫文件」複選框。我在VS2010和VS2012中看到了同樣的問題。如果窗口足夠小,垂直方向需要滾動條,則無法向下滾動以查看此複選框。但是,如果您給窗口足夠的空間以至於不需要滾動條,則複選框將顯示在底部。或者,編輯項目文件並手動將屬性添加到調試和發佈PropertyGroup節點。 –

+0

請爲此提交一個錯誤。我不確定如果在Visual Studio中有問題,我們可以修復它,但滾動應該可以工作。 –