我想我使用了一个相当普遍的模式:
var result = from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes()
where t.IsDefined(typeof(TAttribute), inherit)
select t;
Run Code Online (Sandbox Code Playgroud)
如果我从Program.cs调用代码它是有效的.
此外,如果我从表格中调用它 - 有时,取决于表格.有时它只会抛出一个错误:Mindestens ein Typ in der Assembly kann nicht geladen werden.Rufen Sie die LoaderExceptions-Eigenschaft ab,wenn Sie weitereInformationenbenötigen.
在细节中有信息:
{ "模具Datei奥德大会\" 的EntityFramework,版本= 4.2.0.0,文化=中性公钥= b77a5c561934e089 \"奥得EINEAbhängigkeitdavon wurde nicht gefunden DAS系统卡恩死angegebene Datei nicht芬登. ":" 的EntityFramework,版本= 4.2 .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,如果它们未在您的应用程序中使用,则所有类型的所有类型都将被加载事件.我不会说流利的德语,但我认为错误意味着没有找到EF dll.需要加载一些代码未使用的类,并在appdomain中加载的某个dll中声明它需要EF.你说你使用Telerik,也许它有一些直接使用EF的控件?
如果您只想扫描您的dll,那么简单的解决方案就是引入程序集名称的约定.假设您的所有dll都将被命名OfflerCompany.ProjectName.Something并扫描dll名称OfflerCompany.
另请注意,dll是延迟加载到appdomain所以如果你期望你的所有dll都存在,你可能会感到失望(如果所有直接使用或者至少一次使用,可能已经存在).
您可能需要考虑包含需要扫描的所有dll名称的crrating配置文件.这是我更喜欢的最干净,最透明的解决方案.
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |