繁体   English   中英

使用Sybase时AppDomain.CurrentDomain.GetAssemblies()引发System.Reflection.ReflectionTypeLoadException

[英]AppDomain.CurrentDomain.GetAssemblies() throws System.Reflection.ReflectionTypeLoadException when using Sybase

我认为我使用了一种很常见的模式:

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

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

另外,如果我从某种形式调用它,则可以正常工作-有时取决于形式。 有时它只是抛出一个错误:汇编程序中的Mindestens ein Typ。 Rufen Sie从LoaderExceptions-Eigenschaft ab到Wen Sie weitere Informationenbenötigen。

详细信息中包含以下信息:

{“ Die Datei oder Assembly \\” EntityFramework,版本= 4.2.0.0,文化=中性,PublicKeyToken = b77a5c561934e089 \\“ oder eineAbhängigkeitdavon wurde nicht gefunden。 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089“}

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

我在PROJEKT目录做了“FINDSTR / S / I / M的EntityFramework。”

Funilly在Sybase dll“ SQL Anywhere 12 \\ iAnywhere.Data.SQLAnywhere.v4.0.dll”中找到了它。

好的-似乎有点像sybase sql数据提供程序。 但据我所知,我们不需要EntityFramework,并且该项目也可以按预期工作。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM