获取程序集所需的程序集?
我正在程序中加载程序集 X.dll
,其中 X.dll
可以是任何内容,并且我创建了类 X.A_Class
的实例代码>.但是,如果程序集 X 需要程序集 A、B、C 和 D 该怎么办? ?
我如何检测到这一点?
如何加载它们而不将它们保存在变量中?
I am loading an assembly X.dll
in my program, where X.dll
can be anything, and I create an instance of the class X.A_Class
. But what if the assembly X
requires assemblies A
, B
, C
and D
?
How do I detect this?
How do I load them without holding them in a variable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
引用的程序集通常会自动加载(请参阅相关消息,例如 如何解析程序集.NET? 作为起始链接)。
如果您不是从标准位置(例如 GAC 和应用程序的根文件夹)加载程序集,您可能需要设置路径来加载引用的程序集(搜索“程序集默认加载路径” - 即应用程序配置文件 - http://msdn.microsoft.com/en-us/library/823z9h8w.aspx) 或正如其他答案中提到的,您自己从 AssemblyReslove 事件加载它们。
开始调试加载程序集问题的最佳方法是阅读博客:http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx(以及相关帖子http://blogs.msdn.com/b/suzcook/archive/tags/loader+debugging+advice/ )
编辑:文件夹 -> “根文件夹”+指向探测路径的配置文件主题的链接。
Refferenced assemblies normally will be loaded automatically (see related messages like How is an assembly resolved in .NET? for starting links).
If you are loading assemblies not from standard locations (like GAC and application's root folder) you may need either setup path to load referenced assemblies from (search for "assembly default load path" - i.e. app config file - http://msdn.microsoft.com/en-us/library/823z9h8w.aspx) or load them yourself from AssemblyReslove event as mentioned in other answers.
The best way to start debugging the issues with loading assemblies is read blogs at: http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx (and related posts http://blogs.msdn.com/b/suzcook/archive/tags/loader+debugging+advice/ )
EDIT: folder -> "root folder" + link to config file topic for probing paths.
您可以使用 Assembly.GetReferencedAssemblies 作为 @alexn提到,然后使用 Assembly.Load 来加载它们。或者,您可以挂钩 AppDomain.CurrentDomain.AssemblyResolve 并按需加载它们。
如果您确实需要迭代它们,请确保递归地执行以获得传递依赖项。
You can use Assembly.GetReferencedAssemblies as @alexn mentioned, and then use Assembly.Load to load them. Alternatively, you can hook AppDomain.CurrentDomain.AssemblyResolve and load them on demand.
If you do need to iterate them, make sure you do it recursively to get transitive dependencies.
您可以使用 程序集获取程序集的引用程序集。 GetReferencedAssemblies 方法。
You can get the referenced assemblies for an assembly with the Assembly.GetReferencedAssemblies method.