【发布时间】:2020-06-04 16:32:40
【问题描述】:
我正在创建包含图表的 dll,以发送数据以控制我使用 JSON 格式。 我添加了 NuGet 包 System.Text.Json 并且我可以编译它并测试这个功能传递。
但是,当我在应用程序中使用它(SCADA 系统下面带有 VBA)后,我得到了错误:
无法加载文件或程序集“System.Buffers,Version=4.0.2.0,Culture,neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。系统找不到指定的文件。
我注意到 System.Buffers 在 Dependencies 中不可见,但它已添加到我项目的文件 app.config 中。编译后 System.Buffer.dll 出现在输出文件夹中,所以我也将其复制到目标应用程序。
我发现一些关于绑定重定向的主题会导致类似的问题,但可以解决它。
【问题讨论】:
-
网络应用程序在几个位置查找 dll,如果 dll 不在这些位置之一,则找不到该文件。并非所有 dll 都是相同的,因此很可能 vba dll 将无法工作,或者您需要像 c++ dll 一样使用并使用 DllImport
-
更新:将 dll 放入程序安装文件夹(如帮助主题中指定)后出现错误:无法加载文件或程序集 'System.Buffers,版本 = 4.0.2.0,文化,中性,PublicKeyToken =cc7b13ffcd2ddd51',或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 0x80131040 例外)。
-
@jdweng 这个 scada 系统能够运行用 C# 或 VB.NET 编写的 .net dll,我还在目标计算机上安装了 .NET Framework。它不应该使用 DLL,谢谢我复制或 .Net Framework 安装文件夹中的 dll?
-
有两种主要类型的 dll 1) 在 Net 中与 c# 一起使用的托管 dll 2) 非托管 COM dll。 c:\windows\system32 文件夹中的 dll 是非托管的。任何以 0x8 开头的异常都是由于访问您无权访问的内存而导致的错误。因此,空指针将给出这些错误或在托管的 C# 应用程序。您不能从 Framework 文件夹复制文件并简单地放在另一台机器上。许多 Framework dll 是调用 Windows System 32 dlls 的简单包装器。如果存在相同版本的 Net,C# 应用程序只能在另一台机器上工作.
-
@jdweng 我在两台计算机上都有相同版本的 .NET (4.8)。我复制了在项目的 /bin/Debug 文件夹中创建的 dll。
标签: c# dll dependencies assembly-binding-redirect