为依赖于类库的程序集配置自定义程序集分辨率

时间:2011-11-07 08:30:45

标签: .net vb6 assembly-resolution

好的,这是设置:

  • 使用.Net类的VB6 .exe。
  • 这些类位于5 .dll中,但是通过一个COM可见包装器.dll
  • 公开
  • 使用应用程序清单我可以将COM可见的MyCOMVisibleWrapper.dll(和.tlb)包装器存储在名为MyCOMVisibleWrapper的子文件夹中。
  • 我也希望将依赖的.Net .dll存储在该文件夹中。
  • 然而,CLR在VB6可执行文件所在的文件夹中查找这些.dll,而不是在包装器.dll所在的文件夹中查找。

如何将MyCOMVisibleWrapper文件夹添加到解析路径?我尝试使用<probing privatePath=MyComVisibleWrapper/>标记包含MyCOMVisibleWrapper.dll.config文件,但这不起作用。我读到了有关实现AssemblyResolve EventHandler的内容,但我不确定将其放在哪里,因为.Net代码没有主要入口点。

2 个答案:

答案 0 :(得分:0)

如果您的包装器DLL正确定位,那么您可以在那里处理程序集解析。或者,您可以明确使用LoadFrom从您喜欢的路径加载这些程序集。 (您确实需要使用LoadFrom,因为一些涉及多个位置的用例可能会导致错误)。

答案 1 :(得分:0)

您必须创建一个名为MyVB6App.exe.config的配置文件,其中包含以下内容:

    <configuration> 
     <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <probing privatePath="MyCOMVisibleWrapper"/>
       </assemblyBinding>
     </runtime>
   </configuration>

现在除了MyComVisibleWrapper文件夹中的MyVB6App.exe.Manifest之外,你可以把整个shebang。

查看here进行更广泛的讨论