2015-05-09 111 views
0

我希望能夠順利高效地安裝該解決方案,但是我「繼承」的東西遠非如此,編寫了大部分代碼的人已經離開了公司。將dll安裝到GAC中

目前我正試圖將它安裝在測試服務器上,而不是安裝後正確位置的所有dll的土地。首先,如果我在一個項目中使用log4net,那麼安裝後我需要在文件夾中的log4net.dll(我猜)。如何讓log4net.dll與項目dll一起復制?

其次,項目A期望Project C的dll在GAC中,或者在Visual Studio中進行調試並檢查模塊的加載位置。 我也看到了,這是在A項目後生成事件命令行中輸入:

「C:\ Program Files文件(x86)的\微軟的SDK \的Windows \ v7.0A \ BIN \ NETFX 4.0工具\ 64 \的Gacutil.exe」 -i 「$(TARGETPATH)」 複製 「$(TARGETPATH)」 「C:\ Program Files文件\ MySolution \ BIN」

那麼,如何讓項目C的DLL到GAC通過安裝方式?我在測試服務器上遇到錯誤,因爲它無法加載C.dll。

更多的細節

的解決方案後更新已經安裝了Windows安裝程序,在父文件夾中創建幾個文件夾,如應用程序,箱,發動機,服務等

在Apps文件夾,我有A.exe,它正在尋找C.dll。但是,C.dll登陸bin文件夾。如上所述,在執行A.exe期間,它實際上從GAC加載了C.dll模塊(並且在我的筆記本電腦上,由於在屬性中指定了構建後事件命令行,因此GAC中的那些文件的項目C,但不是在我試圖安裝此解決方案的測試服務器的GAC中)。

所以,是的,我認爲我可以像這樣運行的東西:在安裝後

gacutil -i C.dll 

,但它似乎並不正確。

+0

您使用哪種安裝技術?您不需要將C庫添加到GAC,GAC僅適用於.Net程序集。爲什麼你不能從複製一切內容的文件夾中執行? – mageos

+0

他似乎指的是「項目C」,而不是用C編寫的項目。 –

+0

對於混淆@mageos抱歉,我沒有使用C庫,而是編寫C#代碼。我只是稱其中一個項目爲「項目C」爲例。 – Igavshne

回答

2

有兩個部分與您的問題有關的GAC,並確保DLL被複制。

GAC

退房從MSDN此鏈接(https://msdn.microsoft.com/en-us/library/dkkx7f79%28v=vs.110%29.aspx)關於如何安裝到GAC。關鍵是它必須是強命名的,否則將失敗。

的DDL

取決於你如何引用log4net的,有幾個方法可以做到這一點。

  • 如果你可以添加在你的項目的引用,確保財產CopyLocal設置爲true
  • 如果你只是有本地文件,你可以用一個符號添加到項目中的子文件夾鏈接(https://support.microsoft.com/en-us/kb/306234),然後設置CopyToOutputDirectory屬性。

希望這些可以幫助你。

+0

我其實已經看過MSDN鏈接,但不喜歡在安裝後不得不做。注意_Gacutil.exe僅用於開發目的,不應該用於將生產組件安裝到全局程序集緩存中。我還在解決方案的許多項目中使用了符號鏈接方法來鏈接到外部log4net文件用於配置,這樣我只需要該文件的一個副本。良好的聯繫,但。 – Igavshne

+0

該鏈接還顯示瞭如何使用Windows安裝程序爲您的客戶部署進行安裝。這是使用「InstallShield Limited Edition Project」完成的,該項目是免費的(需要註冊)附件。非常簡單直接的用戶界面。 –

0

我找到了我要找的東西! 選擇安裝項目,然後進入菜單「查看」 - >編輯 - >文件系統。 看來你可以指定dll必須去的地方以及在安裝過程中應該複製到GAC的內容。