2016-03-24 25 views
0

首先是一些背景。我正在研究使用WiX Toolset創建安裝程序的應用程序。我們經常使用WiX來控制設置客戶端的目錄,並將需要的DLL放在他們需要的地方。連字符在DLL名稱中用於VS引用

現在,解決問題:我在應用程序中添加了一個新的DLL,我們稱之爲「NewCode.dll」。 NewCode.DLL依賴於「Dependency-1.DLL」。所以爲了使我的程序工作,我需要在安裝程序中包含Dependency-1.DLL。這就是我陷入困境的地方。由於Dependency-1.DLL名稱中的「-1」,Visual Studio似乎不允許將其添加爲項目的引用。沒有添加它作爲參考,我不相信WiX可以找到它,所以NewCode.DLL將在運行時失敗。簡單地刪除連字符不是一種選擇,因爲NewCode.DLL將無法再引用Dependency-1.DLL。

我已驗證,如果手動將Dependency-1.DLL放入所需的文件夾,一切都將開始工作。所以我想做一些「批處理文件後製作動作魔法」來複制文件是一個有效的選擇,但它並不理想。我真的更喜歡繼續依賴WiX Toolset。


工作答案:

接受的解決方案沒有解決我的問題。但我想我會加入到我的帖子中,以防其他人陷入我所做的同一陷阱。第一個DLL是直接引用,而第二個是第一個依賴的傳遞引用。我爲該組件組的默認位置設置了哪些查找DLL的TargetDir。用我的舊設置,這是假設VS將通過「複製本地= true」來處理將DLL複製到TargetDir。但是,現在,如果你看看我添加的第二個DLL,我明確地設置了源,並且WiX正在爲我移動DLL。

由於WiX現在爲我移動DLL,這讓我圍繞VS的問題不允許使用連字符的DLL名稱作爲參考。

<ComponentGroup Id="AForge" Directory="INSTALL_ROOT" Source="$(var.Pslf.TargetDir)"> 

<Component Guid="{FA5BEE4F-0D54-4B76-BAEF-DC8E31F6605F}"> 
     <File Name="AForge.Video.FFMPEG.dll" KeyPath="yes"/> 
</Component> 

<Component Guid="{1FB3EFEA-1BF3-4416-8AE3-026F2E4EECFC}"> 
     <File Name="avcodec-53.dll" KeyPath="yes" Source="$(var.SolutionDir)pslf\lib\AForge\avcodec-53.dll"/> 
</Component> 
</ComponentGroup> 
+0

什麼版本的visual studio?我剛剛添加了一個已知dll的引用,然後刪除了該引用,並將該dll重命名爲在文件名中包含「-1.dll」,並且讓我添加新引用就好了。這是視覺工作室2015年。「似乎不允許我把它作爲參考項目添加」 - 所以你* *將「添加 - >參考」?並得到一個錯誤?什麼是錯誤? – Quantic

+0

我找到了一個不同的解決方案,但是錯誤信息是「程序集文件無效或無法訪問」。然而,讓我感到奇怪的是,僅僅從名稱中刪除連字符就修復了這個問題(只是不適合我的用途) – CM0491

回答

1

您不需要對預先構建的DLL的WiX引用。只需在Source屬性中輸入它的直接路徑:

<File Id="file_Dependency_1.DLL" Name="Dependency-1.DLL" KeyPath="yes" 
     DiskId="1" Source="$(var.SolutionDir)path\to\dlls\Dependency-1.DLL" /> 
相關問題