使用Assembly.LoadFile时无法加载程序集异常
这是我的场景:
我有三个项目:两个 DLL 和一个控制台应用程序,我们将它们命名为 foo.dll、bar.dll 和 console.exe。 Console.exe 使用 Assembly.LoadFile(@"c:\foo.dll") 加载 foo.dll。 Foo.dll 的项目引用了 bar.dll 并使用了一个类。 Console.exe 加载 foo.dll 正常,当 foo.dll 尝试使用 bar.dll 的类时会出现问题。我收到“无法加载程序集:”bar.dll”等等异常。
一些要点:
- 所有项目都是强命名的
- 宁愿不使用 GAC
- Bar.dll 位于 c:\bar.dll 中
所以一切都在同一个中本地目录中,正在引用正确的 dll(通过项目属性,并且我使用 Reflector 来确保程序集版本正确)。如果我将 bar.dll 安装到 GAC,一切都会按预期进行
。处理 Assembly.LoadFile 调用,并跳转到第二个 DLL,但我不确定
感谢您的时间和输入。
here's my scenario:
I have three projects: two DLLs and one console application, let's name them foo.dll, bar.dll and console.exe. Console.exe loads foo.dll using Assembly.LoadFile(@"c:\foo.dll"). Foo.dll's project has a reference to bar.dll and makes use of a class. Console.exe loads foo.dll fine, the problem occurs when foo.dll tries to use bar.dll's class. I get a "could not load assembly: "bar.dll" blah blah exception.
Some points:
- All projects are strong named
- Would prefer to not use the GAC
- Bar.dll is in c:\bar.dll
So everything is in the same local directory, the correct dlls are being referenced (via project properties, and I've used Reflector to make sure the assembly versions are correct). If I install bar.dll to the GAC everything works as expected.
I think it has something to do with the Assembly.LoadFile call, and making a hop to the second DLL, but I'm not sure.
Thanks for your time and input.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Assembly.LoadFile() 只应在非常特殊的情况下使用。该程序集没有加载上下文,这就是找不到 bar.dll 的原因。唯一真正的用例是转储程序集元数据的工具和程序。
使用 Load 或 LoadFrom()。解决 fuslogvw.exe 问题
Assembly.LoadFile() should only ever be used in very special circumstances. The assembly doesn't have a loading context, that's why bar.dll cannot be found. The only real use case is tooling, programs that dump assembly metadata.
Use Load or LoadFrom(). Troubleshoot problems with fuslogvw.exe