【问题标题】:Assembly.GetTypes()Assembly.GetTypes()
【发布时间】:2011-11-30 11:25:25
【问题描述】:

我的代码中有这个:

Assembly assembly = Assembly.LoadFile(dllFile);
//dllFile has the correct value of a path of a .dll file
foreach (Type type in assembly.GetTypes()) {...}

当我调试我的程序时,一切正常。当我为我的程序创建 exe 时,代码会出现在 assembly.GetTypes() 并停止执行。什么可能导致 assembly.GetTypes() 在调试时与使用 exe 时的工作方式不同?

【问题讨论】:

  • 那么两种情况下的路径是什么?
  • 请显示 dllFile 的确切值,如果你硬编码它,如果你部署应用程序,这将不起作用,因为在调试模式下,在 Release 文件夹中的 Debug 文件夹中的 exe 文件
  • @V4Vendetta 两种情况下的路径都是正确的: C:\Users\John\Documents\Visual Studio 2005\Addins\S_Ajde.dll dll 文件加载正常。错误在 assembly.GetTypes()
  • @Serghei dll 文件的路径是硬编码的,因为 dllFile 不在 bin 或 debug 中。它位于 C:\Users\John\Documents\Visual Studio 2005\Addins\S_Ajde.dll

标签: c# types .net-2.0 .net-assembly


【解决方案1】:

看看这个链接:

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/3bdaf65c-520c-4a1a-a825-fc2ca2957bf3/

您永远不应该使用 Assembly.LoadFile()。如果您知道,请使用 LoadFrom() 程序集所在的位置,使用 Load() 让 .NET 找出位置 组件位于。使用 Load() 应该是您的偏好,但是 可能需要一个 .config 文件来帮助 .NET 找到程序集

感谢@HansPassant

【讨论】:

  • 我应该使用 Assembly.LoadFrom() 而不是 Assembly.LoadFile()
【解决方案2】:

当您创建一个 exe 文件时,您必须确保您的程序集位于正确的文件夹中,并且该 exe 文件可以访问该文件夹。

【讨论】:

  • 程序集位于正确的文件夹中。它们已正确加载。
【解决方案3】:

您可以订阅该事件并从您已知的位置执行简单的Assembly.LoadFrom,甚至可以根据您设计的某些系统进行一些花哨的加载。在AppDomain 中还有TypeResolveResourceResolve 事件,可以让您处理解决AppDomain 的各种依赖关系的这些方面。详情请看Microsoft forum thread

【讨论】:

    猜你喜欢
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多