gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:22:09 27 4
gpt4 key购买 nike

我想我使用了一个很常见的模式:

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 in der Assembly kann nicht geladen werden。 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。

我在项目目录中做了一个“findstr/s/i/m entityframework ”。

有趣的是,它在 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 并扫描 dll 名称以查找 OfflerCompany

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

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com