Visual studio 2012 恢复Nuget引用?
我在Visual Studio 2012中有解决方案和项目 项目的根目录中有一个文件Visual studio 2012 恢复Nuget引用?,visual-studio-2012,nuget,Visual Studio 2012,Nuget,我在Visual Studio 2012中有解决方案和项目 项目的根目录中有一个文件packages.config 出于这个问题的目的,假设我无意中从项目的参考部分删除了这些库 进入NuGet package manager时,界面仍会在这些包旁边报告一个勾号,表示它们已安装 我能看到如何修复这种情况的唯一方法是删除packages.config中的所有条目,这将修复NuGet接口报告它们已安装的问题,并重新添加每个条目 有更聪明的方法吗?我曾希望启用“enable nuget to resto
packages.config
出于这个问题的目的,假设我无意中从项目的参考
部分删除了这些库
进入NuGet package manager时,界面仍会在这些包旁边报告一个勾号,表示它们已安装
我能看到如何修复这种情况的唯一方法是删除packages.config
中的所有条目,这将修复NuGet接口报告它们已安装的问题,并重新添加每个条目
有更聪明的方法吗?我曾希望启用“enable nuget to restore missing packages”可以解决这个问题,但它似乎没有任何作用。您需要恢复丢失的包才能工作
以下脚本可以在Package Manger控制台窗口中运行,并将在重新安装之前从解决方案中的每个项目中删除所有包
foreach ($project in Get-Project -All) {
$packages = Get-Package -ProjectName $project.ProjectName
foreach ($package in $packages) {
Uninstall-Package $package.Id -Force -ProjectName $project.ProjectName
}
foreach ($package in $packages) {
Install-Package $package.Id -ProjectName $project.ProjectName -Version $package.Version
}
}
这将再次运行每个包的安装脚本,这将恢复丢失的程序集引用。不幸的是,安装脚本所能做的所有其他事情——比如创建文件和修改配置——也将再次发生。您可能希望从一个干净的工作副本开始,并使用SCM工具选择项目中要保留的更改和要忽略的更改。
在NuGet Package Manager控制台中,输入以下命令:
更新包-重新安装-ProjectName您的.Project.Name
如果要重新安装软件包并恢复整个解决方案的引用,请忽略
-ProjectName
参数。我手动添加了DLL。在项目中的引用上单击鼠标右键,选择“添加引用”,然后在对话框中按下“浏览”按钮。NuGet DLL位于解决方案的packages目录中。要获取它们的名称,您可以右键单击另一个正常工作的项目中的引用,然后选择properties并查看path属性。当@jmfenoll提供的解决方案工作时,它会更新到最新的包。在我的例子中,安装了beta2(预发布版)之后,它将所有lib更新为RC1(其中有一个bug)。因此,上述解决方案只完成了一半的工作
如果您与我处于相同的情况,并且希望将项目与您在packages.config
中拥有/或指定的NuGet软件包的确切版本同步,那么此脚本可能会对您有所帮助。只需将其复制并粘贴到PackageManager控制台中即可
function Sync-References([string]$PackageId) {
get-project -all | %{
$proj = $_ ;
Write-Host $proj.name;
get-package -project $proj.name | ? { $_.id -match $PackageId } | % {
Write-Host $_.id;
uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force ;
install-package -projectname $proj.name -id $_.id -version $_.version
}
}
}
然后用一个特殊的包名执行它,比如
Sync-References AutoMapper
或适用于所有软件包,如
Sync-References
积分归Dan Haywood和。如果这对某人有帮助,对我来说,上述任何一项都不够。我仍然无法构建,VS仍然无法找到引用。关键是在恢复包后关闭并重新打开解决方案 以下是场景(使用Visual Studio 2012): 您打开的解决方案缺少包。参考资料显示VS找不到它们。有很多方法可以恢复丢失的包,包括
- 构建设置为自动恢复的解决方案
- 打开PackageManager控制台并单击“恢复”按钮
- 如果安装了命令行nuget,则执行
nuget还原
s,发现包回到了它们所属的位置,并且一切都很好
更新
Visual Studio是否仍然没有看到您拥有该软件包?仍然显示无法解析的引用?确保还原的软件包版本与.csproj文件中的
完全相同。即使是一个较小的bug修复编号(例如1.10.1到1.10.2)也会导致引用失败。您可以通过直接编辑csprojxml或删除引用并在packages目录中创建一个指向新还原版本的新引用来修复此问题
$packages = Get-Package -ProjectName [nameOfProjectToRestore]
foreach ($package in $packages) {
uninstall-package -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
}
$packages = Get-Package -ProjectName [nameOfProjectToRestore]
foreach ($package in $packages) {
uninstall-package -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
}
foreach ($package in $packages) {
install-package $package.Id -ProjectName [nameOfProjectToRestore] -Version $package.Version
}
我也遭受了这个问题太多,在我的情况下下载失踪的NuGet检查(但它不是恢复他们),我不能卸载和重新安装,因为我修改了一些已安装的软件包。。。因此: 我刚刚清除了缓存并重建了它,它成功了。 (工具选项Nuget软件包管理器-常规) 这个链接也有帮助
.以防万一,这对某人有所帮助-在我的场景中,我有一些共享库(它们有自己的TFS项目/解决方案),所有这些库都合并到一个解决方案中 Nuget将成功恢复项目,但DLL将丢失 潜在的问题是,虽然您的解决方案有自己的软件包文件夹,并已将其正确还原到该文件夹中,但项目文件(如csproj)引用的是另一个可能未下载软件包的项目。在文本编辑器中打开该文件以查看引用的来源 在管理不同互连共享解决方案上的包时可能会发生这种情况-因为您可能希望确保所有DLL都处于同一级别,所以可以将其设置为顶级。这意味着有时它会为引用的DLL寻找一个完全不同的解决方案,因此如果您没有下载所有项目/解决方案并更新,那么您可能会遇到上述问题。在Visual Studio 2015中(因此
Update-Package -Reinstall -ProjectName Proteus.Package.LinkedContent -IgnoreDependencies
function Sync-References([string]$PackageId, [string]$ProjectName) {
get-project -all |
Where-Object { $_.name -match $ProjectName } |
ForEach-Object {
$proj = $_ ;
Write-Output ('Project: ' + $proj.name)
Get-Package -project $proj.name |
Where-Object { $_.id -match $PackageId } |
ForEach-Object {
Write-Output ('Package: ' + $_.id)
uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force
install-package -projectname $proj.name -id $_.id -version $_.version
}
}
}