在特定项目中,我无法更新或安装任何NuGet包。当我尝试使用NuGet GUI这样做时,它会做一些工作然后停止而不说什么。当我尝试使用包管理器控制台时,我得到了这个输出:
PM> Update-Package –reinstall EntityFramework
Attempting to gather dependencies information for multiple packages with respect to project 'SmartCentre', targeting '.NETFramework,Version=v4.5.2'
Update-Package : An item with the same key has already been added.
At line:1 char:15
+ Update-Package <<<< –reinstall EntityFramework
+ CategoryInfo : NotSpecified: (:) [Update-Package], Exception
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.UpdatePackageCommand
packages
文件夹答案 0 :(得分:16)
事实证明,packages.config
文件有两个不同版本的副本:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<!-- ... -->
<package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.2" targetFramework="net40" />
<!-- ... -->
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net40" />
<!-- ... -->
</packages>
删除重复项后,问题就不复存在了:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<!-- ... -->
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.2" targetFramework="net40" />
<!-- ... -->
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net40" />
<!-- ... -->
</packages>
答案 1 :(得分:1)
在我的情况下,我有不同的packages.config
文件(一个在pcl中,一个在机器人中,一个在ios中),具有不同的包版本。
在我的包文件夹(Projects\MyProjName\packages
)中,我有以下情况:
我只删除了旧版本的重复项,之后我使用正确的版本更新了package.config文件中的数据
例如:
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="net40" />
成了
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
现在你可以重新打开项目,一切正常。
答案 2 :(得分:1)
在我的情况下,我们在回购文件中签入了一个错误的nuget.config文件。它的设置指向两个都包含相同软件包的不同NuGet存储库。我们正在使用NuGet.exe 3.5。删除nuget.config文件可以为我们解决此问题。
答案 3 :(得分:0)
我尝试了一切然后;
值得一试。不用太长时间。
答案 4 :(得分:0)
我以某种方式将两个不同版本的导入引用添加到我的csproj文件中。我已经手动对其进行了编辑,以删除多余的参考。
发件人:
<Import Project="..\packages\Xamarin.Forms.2.5.0.121934\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.5.0.121934\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
<Import Project="..\packages\Xamarin.Forms.3.1.0.583944\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.1.0.583944\build\netstandard2.0\Xamarin.Forms.targets')" />
收件人:
<Import Project="..\packages\Xamarin.Forms.3.1.0.583944\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.1.0.583944\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
<Import Project="..\packages\Xamarin.Forms.v\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.1.0.583944\build\netstandard2.0\Xamarin.Forms.targets')" />
一切都很好。
答案 5 :(得分:0)
我这边遇到同样的问题。卸载软件包,然后再安装软件包解决了该问题。
答案 6 :(得分:0)
如果有人正在使用网络核心并且收到此错误,请使用命令提示符获取详细的错误消息。
请运行dotnet restore
来查找有冲突的版本。
以上命令需要从pjt文件所在的文件夹中运行。
例如:
Unable to satisfy conflicting requests for '************': (>= 1.0.1)
(via package/************ 1.0.22), ************ (>= 1.0.1)
(via project/************ 1.0.0) Framework:
(.NETStandard,Version=v2.0)C:\Users\************\Source\************API.csproj]
答案 7 :(得分:0)
在我的情况下,我将packaged multiple assemblies放在了自定义的NuGet程序包中并修改了主库的版本,但是却忘记了更新辅助程序集。
My.MainPackage.dll v 1.6 <-- Bumped the version here
My.PackageDependency v 1.5 <-- Forgotten to bump this version
在推送这个错误的程序包之后,每当我尝试Update-Package
使用先前版本的任何项目时,我都会收到错误消息
具有相同键的项已添加
由于此程序包的先前和下一发行版均包含旧版本的辅助程序集。
解决方案只是重建损坏的程序包,再次增加两个程序集版本。
FWIW,我尝试使用此不良软件包进行升级的所有下游项目都处于半熟状态,需要手动编辑以恢复到一致的版本。
答案 8 :(得分:0)
此错误消息确实非常模糊,可能意味着任何意思:(
我可以为大型项目推荐这种方法:
对我来说,.csproj中的内容如下:
<RuntimeIdentifier>win</RuntimeIdentifier>
/* Some more stuff */
<RuntimeIdentifiers>win;linux</RuntimeIdentifiers>
删除<RuntimeIdentifier>win</RuntimeIdentifier>
解决了这个问题。
答案 9 :(得分:0)
错误是重复的proj / nuget软件包。那么,如何在不删除/重新安装任何内容的情况下找到重复项?
我跑了dotnet restore
并收到大量错误消息。最后,得到了这个:
C:\...\NuGet.targets(128,5):
error : An item with the same key has already been added.
Key: (MyLib, 1.0.2) [C:\SomeApp.csproj]
MyLib
是重复项。跟踪所有参考。 SomeApp
没有直接引用它,而是通过另一个包引用间接引用了它。现在似乎很明显,但是我花了很长时间才读懂这行。希望这对某人有帮助。
答案 10 :(得分:0)
就我而言,即使 dotnet restore 也没有透露任何信息。 然后我使用 VS 命令提示符dotnet build .sln,它揭示了实际错误以及罪魁祸首库和冲突版本。