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

29
几个月来,我一直没有问题地通过删除并重新创建数据库来生成模型。在从git拉取后,尝试进行相同的过程时出现了问题。在第二步(与数据库创建连接字符串)之后,没有进一步进行到第三步,并且在app.config文件中没有创建与数据库的连接字符串。我尝试使用数据库凭据测试连接,但是得到了以下结果。

connection test failed

当我尝试从模型图中更新特定表时,作为替代方案,我也遇到了以下问题:
System.Data.Entity.Core.EntityException: 在关闭提供程序连接时发生错误。有关详细信息,请参见内部异常。 ---> System.IO.FileNotFoundException: 无法加载文件或程序集'System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'或其依赖项之一。
我已经重新安装了Entity Framework和npgsql包,并尝试添加所有(相同的)程序集,但没有成功。在Stack上类似的答案没有解决我的问题。(我被允许使用当前版本,不需要对VS或任何包进行进一步更新。)
注意:当我使用当前模型的API调用时,我可以从我的服务中获取所有适当的数据(与数据库进行正确通信),但我无法从数据库生成新模型。
有什么解决办法吗?
我正在使用的是
  • Windows 10

  • VS 2015

  • EntityFrameWork 6.2.0

  • Npgsql 3.1.1

  • .Net v.4.6.2

  • Asp.net

    提前致谢!


1
安装 System.Memory 包的 NuGet。 - TheGeneral
1
这是什么类型的应用程序?ASP.NET吗? - jazb
2
你尝试过添加 System.Memory 包 (https://www.nuget.org/packages/System.Memory/) 吗?这可能是由于 Nuget 包中的一些不一致性引起的,例如使用其他包的其他版本作为引用的 2 个不同的包。 - FranzHuber23
你确定这是在pull之后开始发生的吗?你能否在pull之前和之后查看项目中的.csproj文件的更改? - Fakhar Ahmad Rasul
在 pull 之后发生了类似的错误,然后我删除了文件并进行了克隆。然后出现了当前的错误。 - Prometheus
10个回答

27
如果您在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>

28
我曾经遇到类似的问题,当我使用NuGet将System.Memory从4.5.4升级到4.5.5之后。正确的版本是:“4.0.1.1”适用于System.Memory“4.5.4”,而“4.0.1.2”适用于System.Memory“4.5.5”。 - BitQuestions
5
非常感谢@BitQuestions的帮助。使用“4.0.1.2”版本修复了我的问题。但是,你是怎么发现这个解决方法的呢?我引用了4.5.5版本的nuget包,但最终得到的dll版本为4.6.31308.1。那么4.0.1.2版本从哪里来的呢?我唯一找到的方法是添加nuget包并查看配置文件中生成的内容,但你知道更好的方法吗?我在nuget包中找不到任何关于“4.0.1.2”的参考信息。 - rrreee
2
哎呀。在评论之前我应该查看@AirLancer的帖子下面:ildasm可以在MANIFEST部分向您显示它,其中包含此文本:4:0:1:2。这一点并不明显。 - rrreee
2
对于那些仍然像我一样苦苦挣扎的人:在Windows资源管理器中看到的文件版本与程序集版本不同:https://dev59.com/v3wQtIcB2Jgan1znVOZG#74602979 因此,在资源管理器中的文件版本4.6.31308.1是程序集版本4.0.1.2。 - Florian Straub
1
我也不得不使用4.0.1.2版本。 - Meekohi

8
使用 IL Disassembler (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

4

实际上这个答案来自一位资深专家,他帮助解决了这个问题!他说由于解决方案保留了旧文件->导致此错误,您可以尝试打开解决方案中的每个项目,然后删除文件夹'bin'和'obj' -> 再次进行清理构建!这只是一个您可以尝试的选项!


3

我刚刚遇到了一个类似的问题,我的控制台应用程序昨晚还能正常运行,但今天却出现了错误提示信息 "无法加载文件或程序集 'System.Memory, Version=4.0.1.0...'。" 直到我进入 Visual Studio 解决方案的配置管理器 并将 活动解决方案平台 从 "Any CPU" 更改为 "x64",重新构建程序后才使得程序正常工作,不再抛出异常。


2
由于某些原因,特定的nugget包没有正确安装,我无法将其与旧文件进行比较,因为我搞砸了备份文件。所以我又克隆了一次代码库(即使我必须放弃一些进度)。
步骤:
1. 通过nugget包管理器下载时遇到了.Net版本问题,所以我不得不手动下载。 2. 我从https://www.nuget.org/packages/System.Memory/下载了.nupkg文件。 3. 使用在https://gist.github.com/fex80/976ff887acb825171de6中找到的批处理文件提取了dll文件。 4. 将其复制到正确项目的bin文件夹中。 5. 重新构建项目,最后它工作了。

7zip还允许获取dll文件。 - Florian Straub

1
去 NuGet,并将 System.Memory 包升级到下一个版本即可解决问题!!!
System.IO.FileLoadException HResult=0x80131040 Message=无法加载文件或程序集 'System.Memory',版本=4.0.1.2,文化=neutral,公共密钥标记=ccxxxxxxxxx....,或其某个依赖项。找到的程序集清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040) Source=Microsoft.Extensions.Primitives StackTrace: at Microsoft.Extensions.Primitives.StringSegment.Equals(String text, StringComparison comparisonType)

1
对我来说,这很简单,只需从我的引用中删除System.Memory,然后再添加回来即可。奇怪的是,我不知道为什么会发生这种情况。

1
我的应用程序安装了多个版本。我将解决方案中的所有项目都更新到了最新的System.Memory版本,一切都很顺利!

0

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

我不知道这个是否过时了,但是你尝试在项目属性中将目标版本设置为 Windows 10, version 1803 (10.0; Build 17134),最低版本设置为 Windows 10 Fall Creators Update (10.0; Build 16299) 了吗?

enter image description here


我们仍然不知道OP拥有哪种类型的项目。这取决于项目类型(例如UWP,ASP.Net等),这可能会很有用。 - FranzHuber23
1
我的错误,我看到了上面的解决方案,但它不适用于我,因为我正在使用ASP.Net。 - Prometheus

-1
你提供的错误信息表明了一个与特定程序集'System.Memory'及其版本以及依赖项加载相关的System.IO.FileLoadException。让我们来分解一下这个错误信息:
System.IO.FileLoadException:这是被抛出的异常类型。它是与文件加载问题相关的异常,通常发生在加载程序集或库时。
无法加载文件或程序集'System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51':错误信息的这部分指定了无法加载的程序集。它包括程序集名称('System.Memory'),以及版本、文化和公钥令牌。在这种情况下,它正在寻找版本为4.0.1.1并具有特定公钥令牌的'System.Memory'。
"或其某个依赖项":这表明'System.Memory'程序集有依赖项,错误可能也与其中一个依赖项有关。
这个错误通常发生在期望特定版本的程序集时,但无法找到或加载请求的版本。解决这个问题有几种常见的方法:
检查程序集引用:确保项目中对'System.Memory'的引用是正确的,并且与期望的版本、文化和公钥令牌相匹配。
检查程序集的存在:验证所需的程序集“System.Memory”及其依赖项是否存在于您的项目或指定的文件夹中。
使用正确的程序集版本:如果您的项目需要不同版本的“System.Memory”,请更新项目中的引用以匹配所需的版本。
使用绑定重定向:如果无法更新引用并且需要使用不同版本,可以考虑在应用程序的配置文件(例如app.config或web.config)中使用绑定重定向将请求的程序集版本映射到可用版本。
检查全局程序集缓存(GAC):确保程序集不以不同版本的形式已存在于GAC中,这可能会引起冲突。
调查依赖项:如果错误提到了依赖项,请确保这些依赖项也被正确引用和可用。
检查缺失或损坏的文件:有时,问题可能是由于缺失或损坏的程序集文件引起的。确保程序集文件完整且可用。
通过解决上述问题,您可以解决与加载“System.Memory”程序集及其依赖项相关的“System.IO.FileLoadException”问题。

1
根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助他人理解如何解答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接