Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将互操作dll放入GAC?_.net_Vb.net_Com Interop_Gac - Fatal编程技术网

.net 将互操作dll放入GAC?

.net 将互操作dll放入GAC?,.net,vb.net,com-interop,gac,.net,Vb.net,Com Interop,Gac,这个问题可能有点愚蠢,但我需要澄清一下。我对.NET有些陌生,创建了一个必须引用现有COM DLL的EXE。在此过程中,VisualStudio2010自动创建了一个“互操作”DLL,它需要/使用该DLL来处理遗留COM DLL 我已经部署了我的项目,并包括了这个互操作DLL(在同一个文件夹中),一切正常。但是,我还有其他应用程序需要使用相同的遗留COM DLL。可以在每个应用程序中以相同的方式引用它,并在每个应用程序中继续部署“互操作”DLL吗?不幸的是,所有这些小应用程序都放在同一个文件夹中

这个问题可能有点愚蠢,但我需要澄清一下。我对.NET有些陌生,创建了一个必须引用现有COM DLL的EXE。在此过程中,VisualStudio2010自动创建了一个“互操作”DLL,它需要/使用该DLL来处理遗留COM DLL

我已经部署了我的项目,并包括了这个互操作DLL(在同一个文件夹中),一切正常。但是,我还有其他应用程序需要使用相同的遗留COM DLL。可以在每个应用程序中以相同的方式引用它,并在每个应用程序中继续部署“互操作”DLL吗?不幸的是,所有这些小应用程序都放在同一个文件夹中,并且每个应用程序都使用相同的互操作DLL(因此,如果其他应用程序使用它,它将已经存在)。我被迫将它们放在同一个文件夹中,因为调用这些应用程序是为了自定义父应用程序。因此,当它想要运行“自定义”应用程序时,它只会在其本地文件夹中查找。我只是担心如果有一个EXE被删除了,他们去掉了互操作DLL,那么其他仍然依赖它的人就会失败

所以,我想知道在GAC中放置互操作DLL是可能的还是一个好主意?我继续将Interop DLL安装到GAC中,然后从运行我的EXE的文件夹中删除了Interop DLL,但它无法工作。我收到一个错误,上面写着“无法加载文件或程序集”。我一直在努力让它工作

  • 我是否需要在我的项目中以不同的方式引用互操作DLL,以便它现在来自GAC? 或
  • 我是否需要向.NET代码中添加Assembly.Load之类的内容才能使其正常工作
  • 我需要自己使用TLBIMP创建互操作DLL吗
  • 任何帮助都将不胜感激

    致以最良好的祝愿

    Nelson

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

    注:如果您使用的是VS.NET 2010,则可以使用
    嵌入互操作类型
    项目属性。

    ,该属性称为PIA,“主互操作程序集”。您可以使用Tlbimp.exe的/primary选项(HowTo)生成它们

    在某些情况下,当一个程序集将导入库中的类型公开给另一个程序集(该程序集运行时加载了互操作库的单独副本)时,必须具有PIA。显然这不是你的情况。VS2010支持“嵌入互操作类型”功能,这是一个非常理想的功能,重要的库完全消失


    如果是你的话,我就不麻烦了。把它放进GAC没有什么好处,只是让人头疼。否则,如果不知道出现问题的原因,请使用Fuslogvw.exe对程序集解析问题进行故障排除。

    谢谢Stefan。我对伊尔梅不熟悉。有趣的应用程序。但是,我不想将主EXE与Interop DLL合并到GAC中,因为EXE实际上只在一个地方使用。更多的是在多个EXE中共享的互操作DLL,以及使用GAC的目的。