gpt4 book ai didi

.net - 为什么 Visual Studio 2012 会引用错误版本的程序集?

转载 作者:行者123 更新时间:2023-12-01 04:58:05 24 4
gpt4 key购买 nike

我正在尝试将遗留 Web 应用程序从 .net 3.5 升级到 .net 4.5,以便能够使用 Microsoft SignalR 库。如果我只是将 .net 版本更改为 4.5,一切正常,但当我尝试引用 SignalR 时,一切都乱套了。

也许表面下潜伏着更多问题,但我不断收到有关名为 Newtonsoft.Json 的库的错误消息。

为了说明这一点,Web 应用程序已经引用了旧版本的 Newtonsoft.Json。

令人困惑的是,NuGet 包管理器在尝试安装 Newtonsoft.Json 6.0.8(撰写本文时的最新版本)时抛出错误:

Failed to generate binding redirects for XXXXXXXXXX. An item with the same key has already been added.

我决定,如果该工具无法正常工作而给我带来麻烦,我将手动引用该文件,然后就此结束。 NuGet 确实成功地将文件安装到项目目录中,因此我执行了以下操作:

我展开了 Web 应用程序下的“References”文件夹并删除了对 Newtonsoft.Json 的引用。我单击“添加引用”并浏览到 .\packages\Newtonsoft.Json.6.0.8\lib\net45Newtonsoft.Json.dll

但是,当我尝试运行该应用程序时,出现以下错误:Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 或以下之一它的依赖。找到的程序集的 list 定义与程序集引用不匹配。 (HRESULT 异常:0x80131040) 这在几个层面上没有意义:对于初学者来说,Newtonsoft.Json 的旧版本是 3.0。其次,我添加的文件被特别标记为版本 6.0.8,但最奇怪的是,当我在 Visual Studio 2012 中查看引用的属性时,我看到以下内容:

Path: XXXXX\Framework\bin\lib\Newtonsoft.Json.dll
Runtime: Version v2.0.50727
Version: 3.0.0

出于某种原因,Visual Studio 正在引用不同目录中的不同文件(以前的 .net 框架的早期版本)!

使事情复杂化的是,“解决方案”中的其他“项目”使用以前版本的 Newtonsoft.Json,但这似乎并不能解释为什么我会单击“添加引用”->“浏览”,选择 6.0. 8 版本并获取对不同目录中不同文件的引用。

我看不出这个文件在 GAC 中的任何地方,如果这有什么不同的话。

请帮我解决这个问题。

根据@ChrisBint 在下方的回答进行编辑

newtonsoft.json 的 web.config 中没有 bindingRedirect 标签。

在控制台包管理器上输入 Add-BindingRedirect 没有任何反应,Visual Studio 仍在引用错误的文件。

另一个编辑:

为了查看问题是否孤立在一个项目中,我尝试将另一个 Web 应用程序项目添加到我的解决方案中。我添加了对 Newtonsoft.Json 6.0.8 的引用,看起来在该项目中一切正常。

还有,我上次做Add-BindingRedirect命令的时候脑子放屁了。我选错了项目。当我选择了正确的项目时,它会显示:

PM> Add-BindingRedirect
Add-BindingRedirect : An item with the same key has already been added.
At line:1 char:20
+ Add-BindingRedirect <<<<
+ CategoryInfo : NotSpecified: (:) [Add-BindingRedirect], ArgumentException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.AddBindingRedirectCommand

另一个编辑:随着我继续调查,我发现了一些奇怪的事情。如果我在项目中搜索任何引用的名称,我会发现它列在 XXXXX.csproj.properties 中。但是,在那里找不到 Newtonsoft.Json,.properties 文件也不包含目录。 Visual Studio 甚至如何知道在哪里寻找文件?

最佳答案

问题是Assembly Redirects中的条目不正确,与此类似;

 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>

这些位于 web.config/app.config 中,您应该能够使用您拥有的程序集信息手动更新它。或者,您可以删除该条目并从 Visual Studio 中的包管理器控制台窗口运行以下命令

Add-BindingRedirect

确保您在下拉列表中选择了正确的项目。

关于.net - 为什么 Visual Studio 2012 会引用错误版本的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29200632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com