![](/img/trans.png)
[英]AppDomain.CurrentDomain.GetAssemblies fails with 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.