无法更新或安装包:已添加具有相同密钥的项目
Can't update or install package: An item with the same key has already been added
问题
在特定项目中,我无法更新或安装任何 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
环境
- Visual Studio 专业版 2015 更新 1
- NuGet 3.3.0.167
我试过的
- 正在删除
packages
文件夹
- 正在重启Visual Studio
- 正在重新启动计算机
原来 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>
就我而言,我有不同的 packages.config
文件(一个在 pcl 中,一个在 droid 中,一个在 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" />
现在您可以重新打开项目,一切正常。
我什么都试过了,然后;
- 确保框架是最新的。 (对于我正在升级的 MVC 包)
- 已卸载 NuGet 并重新安装。
可能值得一试。不会花太长时间。
我以某种方式向我的 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')" />
一切顺利。
在我的情况下,我们的存储库中签入了一个错误的 nuget.config 文件。它的设置指向两个不同的 NuGet 存储库,这两个存储库都包含相同的包。我们使用的是 NuGet.exe 3.5。删除 nuget.config 文件为我们解决了这个问题。
我这边遇到了同样的问题。卸载软件包后安装软件包解决了问题。
如果有人在使用 net core 并遇到此错误,请使用命令提示符获取详细的错误消息。
请运行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]
就我而言,我在自定义 NuGet 包中 packaged multiple assemblies 并提高了主库的版本,但忘记更新辅助程序集。
My.MainPackage.dll v 1.6 <-- Bumped the version here
My.PackageDependency v 1.5 <-- Forgotten to bump this version
推送这个错误的包后,每当我尝试 Update-Package
使用以前版本的任何项目时,我都会收到错误消息
An item with the same key has already been added
因为这个包的前一个版本和下一个版本都包含旧版本的辅助程序集。
解决方案是简单地重建损坏的包,再次碰撞两个程序集版本。
FWIW 我试图用这个坏包升级的任何下游项目都处于半生不熟的状态,需要手动编辑才能恢复到一致的版本。
这个错误消息真的非常模糊,可以代表任何意思:(
我可以为大型项目推荐这种方法:
- 从您的解决方案中删除所有项目
- 一一阅读直到出现错误
- 检查您上次添加的项目的.csproj
- 从 .csproj 中删除大部分
- 如果错误仍然存在请尝试
- 重复直到您可以缩小导致问题的部分(阅读之前删除的部分通常是个好主意)
- 继续,直到找到看起来重复的内容
对我来说,我的 .csproj 中有以下内容:
<RuntimeIdentifier>win</RuntimeIdentifier>
/* Some more stuff */
<RuntimeIdentifiers>win;linux</RuntimeIdentifiers>
删除 <RuntimeIdentifier>win</RuntimeIdentifier>
解决了问题。
错误是重复的 proj/nuget 包。那么你如何找到没有 removing/re-installing 任何东西的副本?
我 运行 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
没有直接引用它,而是通过另一个包引用间接引用它。现在看起来很明显,但我花了很长时间才读到这一行。希望这对某人有所帮助。
就我而言,甚至 dotnet restore 也没有透露任何信息。
然后我 dotnet build .sln 使用 VS 命令提示符,它揭示了实际错误以及罪魁祸首库和冲突版本。
我在使用 NuGet Package Explorer 验证新的 DotnetTool 时遇到了这个错误,原因是我的工具引用了来自 EXE(而不是 DLL)的代码,因此它以两个不同的“.deps.json" 文件。所以最好避免引用 EXE 文件。
问题
在特定项目中,我无法更新或安装任何 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
环境
- Visual Studio 专业版 2015 更新 1
- NuGet 3.3.0.167
我试过的
- 正在删除
packages
文件夹 - 正在重启Visual Studio
- 正在重新启动计算机
原来 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>
就我而言,我有不同的 packages.config
文件(一个在 pcl 中,一个在 droid 中,一个在 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" />
现在您可以重新打开项目,一切正常。
我什么都试过了,然后;
- 确保框架是最新的。 (对于我正在升级的 MVC 包)
- 已卸载 NuGet 并重新安装。
可能值得一试。不会花太长时间。
我以某种方式向我的 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')" />
一切顺利。
在我的情况下,我们的存储库中签入了一个错误的 nuget.config 文件。它的设置指向两个不同的 NuGet 存储库,这两个存储库都包含相同的包。我们使用的是 NuGet.exe 3.5。删除 nuget.config 文件为我们解决了这个问题。
我这边遇到了同样的问题。卸载软件包后安装软件包解决了问题。
如果有人在使用 net core 并遇到此错误,请使用命令提示符获取详细的错误消息。
请运行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]
就我而言,我在自定义 NuGet 包中 packaged multiple assemblies 并提高了主库的版本,但忘记更新辅助程序集。
My.MainPackage.dll v 1.6 <-- Bumped the version here
My.PackageDependency v 1.5 <-- Forgotten to bump this version
推送这个错误的包后,每当我尝试 Update-Package
使用以前版本的任何项目时,我都会收到错误消息
An item with the same key has already been added
因为这个包的前一个版本和下一个版本都包含旧版本的辅助程序集。
解决方案是简单地重建损坏的包,再次碰撞两个程序集版本。
FWIW 我试图用这个坏包升级的任何下游项目都处于半生不熟的状态,需要手动编辑才能恢复到一致的版本。
这个错误消息真的非常模糊,可以代表任何意思:(
我可以为大型项目推荐这种方法:
- 从您的解决方案中删除所有项目
- 一一阅读直到出现错误
- 检查您上次添加的项目的.csproj
- 从 .csproj 中删除大部分
- 如果错误仍然存在请尝试
- 重复直到您可以缩小导致问题的部分(阅读之前删除的部分通常是个好主意)
- 继续,直到找到看起来重复的内容
对我来说,我的 .csproj 中有以下内容:
<RuntimeIdentifier>win</RuntimeIdentifier>
/* Some more stuff */
<RuntimeIdentifiers>win;linux</RuntimeIdentifiers>
删除 <RuntimeIdentifier>win</RuntimeIdentifier>
解决了问题。
错误是重复的 proj/nuget 包。那么你如何找到没有 removing/re-installing 任何东西的副本?
我 运行 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
没有直接引用它,而是通过另一个包引用间接引用它。现在看起来很明显,但我花了很长时间才读到这一行。希望这对某人有所帮助。
就我而言,甚至 dotnet restore 也没有透露任何信息。 然后我 dotnet build .sln 使用 VS 命令提示符,它揭示了实际错误以及罪魁祸首库和冲突版本。
我在使用 NuGet Package Explorer 验证新的 DotnetTool 时遇到了这个错误,原因是我的工具引用了来自 EXE(而不是 DLL)的代码,因此它以两个不同的“.deps.json" 文件。所以最好避免引用 EXE 文件。