Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 恢复Nuget引用?_Visual Studio 2012_Nuget - Fatal编程技术网

Visual studio 2012 恢复Nuget引用?

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

我在Visual Studio 2012中有解决方案和项目

项目的根目录中有一个文件
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还原
但无论采用何种方法,这些参考资料仍将显示为缺失。当你建立它时,它将失败。唉。然而,如果您关闭解决方案并重新打开它,那么现在VS再次检查那些漂亮的
s,发现包回到了它们所属的位置,并且一切都很好

更新 Visual Studio是否仍然没有看到您拥有该软件包?仍然显示无法解析的引用?确保还原的软件包版本与.csproj文件中的
完全相同。即使是一个较小的bug修复编号(例如1.10.1到1.10.2)也会导致引用失败。您可以通过直接编辑csprojxml或删除引用并在packages目录中创建一个指向新还原版本的新引用来修复此问题

  • 复制项目的packages.config文件并应用所有版本修改
  • Unistall所有包并删除依赖项

    $packages = Get-Package -ProjectName [nameOfProjectToRestore]
    foreach ($package in $packages) {
        uninstall-package  -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
    }
    
  • 清除项目根目录中的packages文件夹

  • 将modifies package.config复制到网站的根文件夹

  • 运行此代码以还原项目

    $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
            }
        }
    }