无法加载文件或程序集“System.Memory,版本 = 4.0.1。” 在 Visual Studio 2015 中

Pro*_*eus 7 .net c# npgsql entity-framework-6 visual-studio-2015

几个月来,我对通过删除并重新创建从数据库生成模型没有任何问题。从 git pull 后,在尝试制作相同的 process 时出现问题。在第二步(使用 DB 的连接字符串创建)之后,第三步不再继续进行,并且在 app.config 文件中没有创建与数据库的连接字符串。我尝试使用数据库凭据测试连接,并且我得到以下信息。

连接测试失败

当我尝试从模型图中更新特定表作为替代方案时,我还得到以下信息:

System.Data.Entity.Core.EntityException:关闭提供程序连接时出错。有关详细信息,请参阅内部异常。---> System.IO.FileNotFoundException: 无法加载文件或程序集“System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。

我重新安装了实体框架和 npgsql 包,并尝试添加所有(相同的)程序集,但没有成功。Stack 上的类似答案并没有解决我的问题。(我可以使用当前版本,而无需在 VS 或其任何软件包上进行进一步更新。)

注意:当我使用 API 调用与当前模型(与 DB 正确通信)时,我从我的服务中获取了所有适当的数据,但我无法从 DB 生成新模型。

任何解决方案?

我在用

  • 视窗 10

  • VS 2015

  • 实体框架 6.2.0

  • Npgsql 3.1.1

  • .Net v.4.6.2

  • Asp.net

    提前致谢 !

Bri*_*ter 29

如果此错误出现在 IIS 应用程序(例如 ASP.NET)中,则很可能您在 web.config 中缺少绑定重定向。

从 Nuget 安装时,您应该在 web.config 中看到绑定重定向。

如果您将应用程序部署到另一台计算机,但未能在该辅助计算机上设置绑定重定向,则可能会出现此错误。

<dependentAssembly>
  <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

  • 使用 NuGet 将 System.Memory 从 4.5.4 升级到 4.5.5 后,我遇到了类似的问题。正确的版本,对于 System.Memory“4.5.4”和“4.0.1.2”来说,有“4.0.1.1”对于系统内存“4.5.5”。 (33认同)
  • 非常感谢@BitQuestions。使用“4.0.1.2”为我解决了这个问题。但你是怎么想出来的呢?我有一个版本 4.5.5 的 nuget 引用,而我最终从 nuget 得到的 dll 版本为 4.6.31308.1。那么4.0.1.2版本从何而来呢?我发现解决这个问题的唯一方法是添加 nuget 包并查看配置文件中生成的内容,但是您知道更好的方法吗?我在 nuget 包中找不到任何对“4.0.1.2”的引用。 (5认同)
  • 哎呀。在发表评论之前,我应该先检查一下@AirLancer 的帖子:ildasm 可以在 MANIFEST 部分中向您显示该文本,其中包含以下文本:4:0:1:2。这一点都不明显。 (2认同)
  • 对于那些仍然为此苦苦挣扎的人(像我一样):您在 Windows 资源管理器中看到的文件版本与程序集版本不同:/sf/answers/5222208561/ 因此资源管理器中的文件版本 4.6.31308.1是汇编版本4.0.1.2 (2认同)
  • 我也必须使用 4.0.1.2。 (2认同)

Air*_*cer 8

使用 IL 反汇编程序 (ildasm.exe) 检查输出目录中的版本是否与错误消息中的版本匹配。
我们的软件经常遇到此类问题,因为不同的 nuget 软件包需要不同的版本以及 nuget 中没有的库的令人讨厌的组合。
构建过程不考虑对同一库的不同版本的需求。

如果版本不匹配确实是问题的原因,您可能会在 app.config 中查找绑定重定向,以将该库的所有旧版本转发到最新版本。
需要将类似这样的内容添加到<dependentAssembly>相关库的节点中:

<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />

ildasm 通常可以在这里找到(取决于您的 Visual Studio 版本)
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\ildasm.exe


小智 0

通过快速谷歌搜索,我发现了这个: https: //github.com/GrillPhil/ServerlessRealtimeDemo/issues/1

我不知道这是否已经过时,但您是否尝试过在项目中将目标版本设置为 Windows 10 版本 1803(10.0;Build 17134)并将最低版本设置为 Windows 10 Fall Creators Update(10.0;Build 16299)特性?

在此输入图像描述