将interop dll放入GAC?

时间:2011-04-07 19:06:14

标签: .net vb.net com-interop 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?
  4. 非常感谢任何帮助!

    最诚挚的问候,

    纳尔逊

2 个答案:

答案 0 :(得分:1)

这被称为PIA,“主要互操作程序集”。您可以使用Tlbimp.exe的/ primary选项生成它们,HowTo is here

在某些情况下,您拥有以拥有PIA,当其中一个程序集将某个类型从导入库公开到另一个使用加载的互操作程序库的单独副本运行的程序集时,则需要该PIA。显然,这不是你的情况。这也是dodo的方式,VS2010支持“嵌入互操作类型”功能,这是一个非常理想的功能,重要的库完全消失。

在你的情况下,我不会打扰。把它放入GAC没有任何好处,只有头痛。否则不知道为什么遇到问题,请使用Fuslogvw.exe来解决装配分辨率问题。

答案 1 :(得分:0)

您可以使用ILmerge创建单个.dll文件并将其部署到GAC中。

PS。如果您使用的是VS.NET 2010,则可以使用Embed Interop types项目属性look here