簡體   English   中英

將interop dll放入GAC?

[英]Put interop dll into GAC?

這可能是一個愚蠢的問題,但我需要澄清一些。 我對.NET有點新,並創建了一個必須引用現有COM DLL的EXE。 在這樣做時,Visual Studio 2010自動創建了一個“Interop”DLL,它需要/使用它來處理舊的COM DLL。

我已經部署了我的項目並將它包含在這個Interop DLL中(在同一個文件夾中),一切正常。 但是,我有其他應用程序需要使用相同的傳統COM DLL。 可以在每個應用程序中以相同的方式引用它並繼續在每個應用程序中部署“Interop”DLL嗎? 不幸的是,所有這些小應用程序都在同一個文件夾中,並且每個都使用相同的Interop DLL(因此,如果它被其他應用程序使用,它就已存在。)我被迫將它們放在同一個文件夾中,因為這些應用程序正在被稱為自定義父應用程序的一種方式。 因此,當它想要運行“自定義”應用程序時,它只查看它的本地文件夾。 我只是擔心如果一個EXE被刪除並且他們取出Interop DLL,那么仍​​然依賴它的其他人將會失敗。

所以,我想知道將Interop DLL放入GAC是否可能或者是個好主意? 我繼續將Interop DLL安裝到GAC中,然后從我運行EXE的文件夾中刪除了Interop DLL,但它無法正常工作。 我收到一條錯誤消息“無法加載文件或程序集”。 我堅持讓這個工作。

  1. 我是否需要以不同方式引用我項目中的Interop DLL,以便它現在來自GAC? 要么
  2. 我是否需要在我的.NET代碼中添加一些東西,比如Assembly.Load才能使它工作?
  3. 我是否需要使用TLBIMP自己創建Interop DLL?

任何幫助將不勝感激!

最好的祝福,

納爾遜

這被稱為PIA,“主要互操作組件”。 你用Tlbimp.exe的/ primary選項生成它們,HowTo 在這里

在某些情況下,您需要有一個PIA,當您的某個程序集將一個類型從導入庫暴露給另一個使用加載的互操作程序庫的單獨副本運行的程序集時需要。 顯然,這不是你的情況。 它也是渡渡鳥的方式,VS2010支持“嵌入互操作類型”功能,這是一個非常理想的功能,重要的庫完全消失。

在你的情況下,我不會打擾。 把它放入GAC沒有任何好處,只有頭痛。 否則不知道為什么你遇到麻煩,使用Fuslogvw.exe來解決程序集解決問題。

您可以使用ILmerge生成單個.dll文件並將其部署到GAC中。

PS。 如果您使用的是VS.NET 2010,則可以使用Embed Interop types項目屬性,請查看此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM