无法加载文件或程序集

Posted

技术标签:

【中文标题】无法加载文件或程序集【英文标题】:Could not load file or assembly 【发布时间】:2009-06-01 19:31:02 【问题描述】:

我正在开发一个将SqlServerCeNHibernate 结合使用的系统。在我的驱动程序中,如果我添加 System.Data.SqlServerCe 程序集作为参考,我可以很好地创建和运行对数据库的查询。但是,在尝试使用 NHibernate 时,出现以下异常:

在 mscorlib.dll 中发生了“System.IO.FileNotFoundException”类型的第一次机会异常 附加信息:“System.Data.SqlServerCe”或其依赖项之一。系统找不到指定的文件。

我已经追踪到对Assembly.Load("System.Data.SqlServerCe") 的调用的异常,这似乎应该可以工作。 System.Data.SqlServerCe 程序集在 GAC 中(我也尝试将其添加为 CopyLocal=true 的本地引用,但无济于事),我可以很好地使用它的成员,为什么我不能显式加载它?当我在 Reflector 中打开程序集时,它无法加载 System.Transactions 引用(我也尝试将其添加为本地引用,再次无济于事),因此加载该程序集可能是问题所在,而不是 @987654330 @。

这是一个常见问题吗?可能是系统配置错误?

【问题讨论】:

看起来你从未听说过 Fusion:hanselman.com/blog/… 哦,好工具。它给我的反馈是: LOG:之前看到过相同的绑定,并且失败,hr = 0x80070002。 ERR:预下载检查期间发生不可恢复的错误(hr = 0x80070002)。哪个看起来没什么用——它以前失败过,所以让我们再失败一次?我需要阅读融合文档,希望能更好地解决这个问题。然而,有人指出了我的问题的解决方案——详情如下。 【参考方案1】:

显然,这可以通过在 app.config 文件中添加 元素来解决。添加以下内容使我的应用程序运行顺利:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </assemblyBinding>
</runtime>

谢谢!

【讨论】:

是的,上面提到的 fullName 确实是程序集的全名。它为 CLR 提供查找和加载特定程序集所需的信息。您还可以在 .config 文件中的连接字符串中替换该 fullName(代替 partialName)【参考方案2】:

这很可能与某些系统(错误)配置有关。

但是,根据设计,SQL Server CE 只是一个单独的 DLL,它可能与您的产品一起提供。 这意味着您只需在System.Data.SqlServerCe 的引用属性中将Copy local 设置为True,就完成了。

【讨论】:

【参考方案3】:

我遇到了类似的问题。我犯的错误是我试图执行 ../obj/x86/Release 中的 .exe,而我应该执行 ../bin/Release 中的 .exe。 (我是 C# 的绝对新手)。

(我也注意到在这个../bin/Release目录下,引用的.dll文件被复制到本地了。)

【讨论】:

以上是关于无法加载文件或程序集的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

能加载文件或程序集“Aspose.Cells”或它的某一个依赖项。无法验证强名称签名

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

寻找解决策略:无法加载文件或程序集[重复]

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集 Microsoft.CodeAnalysis