【问题标题】:.NET 4.7.2 System.Text.Json missing dependency.NET 4.7.2 System.Text.Json 缺少依赖项
【发布时间】: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


【解决方案1】:

我正在使用 .Net Standard 2.0 类库构建一个 Windows 窗体应用程序。对我来说,将System.Text.Json Nuget 添加到 Windows 窗体应用程序以及类库解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2017-12-25
    • 2015-04-18
    • 2020-03-24
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多