c# - 使用 Sybase 时 AppDomain.CurrentDomain.GetAssemblies() 抛出 System.Reflection.ReflectionTypeLoadException

标签 c# reflection

我认为我使用了一个非常常见的模式:

var result = from a in AppDomain.CurrentDomain.GetAssemblies()
                         from t in a.GetTypes()
                         where t.IsDefined(typeof(TAttribute), inherit)
                         select t;

如果我从 Program.cs 调用代码,它就会起作用。

此外,如果我从表单中调用它,它会起作用 - 有时,取决于表单。有时它只是抛出一个错误: 议会中的典型思想是不明确的。 Rufen Sie die LoaderExceptions-Eigenschaft ab,wenn Sie weitere Informationen benötigen。

详细信息中有信息:

{"Die Datei oder Assembly\"EntityFramework, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\"oder eine Abhängigkeit davon wurde nicht gefunden。Das System kann die angegebene Datei nicht finden。":"EntityFramework,版本=4.2.0.0,文化=中性,PublicKeyToken=b77a5c561934e089"}

这对我来说有点令人惊讶。据我所知,我们没有在任何地方使用 EntityFramework,仅使用 Telerik 作为 ER。

我在 projekt 目录中完成了“findstr/s/i/m Entity Framework ”。

有趣的是,它在 Sybase dll“SQL Anywhere 12\iAnywhere.Data.SQLAnywhere.v4.0.dll”中找到了它。

好吧 - 这看起来有点像 sybase sql 数据提供程序。但据我所知,我们不需要 EntityFramework,并且该项目也按预期运行。

我该如何解决这个问题?就像说:我想解析Appdomain,但不想解析一些第三方dll。或者有什么办法可以忽略这个错误?

最佳答案

在这种情况下解析整个应用程序域将扫描所有已加载的 dll,并且如果您的应用程序中未使用它们,则所有类型都将被加载事件。我的德语不流利,但我认为该错误意味着未找到 EF dll。需要加载一些代码未使用的类,这些类在 appdomain 中加载的某些 dll 中声明,并且需要 EF。你说你使用 Telerik,也许它有一些直接利用 EF 的控件?

如果您只想扫描 dll,简单的解决方案是引入程序集名称约定。假设您的所有 dll 都将被命名为 OfflerCompany.ProjectName.Something 并扫描 OfflerCompany 的 dll 名称。

另请注意,dll 是延迟加载到 appdomain 的,因此如果您希望所有 dll 都存在,您可能会失望(如果全部直接使用或至少使用一次,则可能已经存在)。

您可能需要考虑创建包含所有需要扫描的 dll 名称的配置文件。这是我喜欢的最干净、最透明的解决方案。

关于c# - 使用 Sybase 时 AppDomain.CurrentDomain.GetAssemblies() 抛出 System.Reflection.ReflectionTypeLoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13561007/

相关文章:

c# - JavaScript 模态弹出窗口 - 用自定义按钮替换 OK 按钮

Scala 反射在运行时解析名称中的通用特征

c# - 如何转换为给定类型?

c# - 在 Roslyn 中使用泛型生成有效类型名称的技术

c# - 将操作图形绘制到另一个图形中

c# - 除了在 C# 中声明之外,是否可以在其他文件中的其他类主体中创建类?

c# - 如何获取实现接口(interface)的类列表?

c# - 使用 BindAttribute 附加到子类 MVC3 模型中的白名单

c# - 计算对象中所有字符串属性的总长度

c# - 如何使用额外属性扩展类