Visual Studio에서 NuGet 패키지 복원을 어떻게 활성화합니까?


272

거기의 유사한 포스트 스택은하지만 난 비주얼 스튜디오 2015 사용하고 있기 때문에 아마도 내 문제에 도움이되지 않습니다.

VS2015에 "NuGet 패키지 복원 사용"옵션을 표시하려면 어떻게합니까?

File> New Project를 선택하고 빈 ASP.NET Web Application을 만들었습니다 . 이 메뉴 옵션을 찾고 있습니다.

여기에 이미지 설명을 입력하십시오

내 프로젝트 폴더에서 기존의 nuGet 파일을 찾았지만 아무것도 없다는 것을 언급해야합니다.


4
웹 프로젝트가 아닌 솔루션에 대해이 작업을 수행하고 있는지 확인하십시오. 하나 개의 프로젝트가있을 때 기본적으로이 솔루션은 표시되지 않습니다
JConstantine

1
예, 그건 분명히 쉬운 실수이지만 해결책을 확인해야합니다 .2015 년과 관련이 있다고 생각합니다. 동일한 단계를 수행하면 VS2013에서 활성화 옵션을 사용할 수 있습니다.
Dan Beaulieu

2
여기도 마찬가지입니다. VS 2013에서 NuGet 패키지 복원 사용 옵션을 다시 활성화하는 .nuget 폴더를 삭제하려고했지만 여전히 주사위는 없습니다. VS 2013에서 만든 기존 MVC 응용 프로그램을 열려고합니다.
Vinney Kelly

4
@justanotherdev 주석을 좀 더 생산적으로 만들기 위해 새 워크 플로에 대한 참조를 제공 한 경우 유용합니다.
avantprime

1
나는 oligofren이 참조한 David Ebbo의 기사를 보지 못했기 때문에 메모장 ++에서 sln & csproj 파일을 열고 그가 설명한 섹션을 삭제했습니다. VS2015에서 솔루션을 열었고 파일을 저장하면 VS가 파일을 다시로드하라는 메시지를 표시했으며 솔루션 참조가 올바르게 작성되어 솔루션을 컴파일했습니다. 정말 고마워요, Vinney!
Rich Ward

답변:


248

너무 오래 걸렸지 만 마침내 MSBuild 통합 솔루션을 자동 패키지 복원 으로 마이그레이션 에 대한이 문서를 찾았 으며 여기에 설명 된 방법을 사용하여 문제를 해결할 수있었습니다.

  1. '.nuget'솔루션 에서 솔루션 디렉토리를 제거하십시오.
  2. nuget.targets귀하 .csproj또는 .vbproj파일 에서 모든 참조를 제거하십시오 . 공식적으로 지원되지는 않지만 정리해야 할 프로젝트가 많은 경우 문서가 PowerShell 스크립트에 연결 됩니다. 손으로 직접 편집하여 경험에 대한 피드백을 줄 수 없습니다.

직접 파일을 편집 할 때 다음과 같은 정보를 얻을 수 있습니다.

솔루션 파일 (.sln)

Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F4AEBB8B-A367-424E-8B14-F611C9667A85}"
ProjectSection(SolutionItems) = preProject
    .nuget\NuGet.Config = .nuget\NuGet.Config
    .nuget\NuGet.exe = .nuget\NuGet.exe
    .nuget\NuGet.targets = .nuget\NuGet.targets
EndProjectSection
EndProject

프로젝트 파일 (.csproj / .vbproj)

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

3
나는 여기에 완전히 빠져 있습니다. 이 방법을 사용하면 내가 가진 모든 솔루션에 패키지 패키지가 설치됩니다. 10 개의 패키지가있는 솔루션과 정확히 동일한 패키지가있는 다른 솔루션이 있습니다. 각 10 개의 패키지가 포함 된 두 개의 다른 디렉토리가 생성됩니다. 이 방법을 사용하면 모든 패키지를 단일 디렉토리로 통합하는 방법은 무엇입니까 (이전 VS2013 방법에서 NuGet.Config 파일을 편집하여 허용하는 것처럼)?
Quarkly

.nuget 폴더가 보이지 않습니까? 패키지 폴더에서 폴더 삭제에 대한 솔루션을 확인하십시오. 패키지 반이 복원되었을 수 있으며 쓰레기가 완전히 복원되지 못하게 막고 있습니다.
그렉

실제로 이것이 해결책이었습니다. 이 외에도 프로젝트 빌드를 시작하기 전에 "너겟 복원"을 추가했습니다. 너겟 패키지는 자동으로 다운로드되며, 프로젝트 빌드는 정상적으로 작동합니다.
TarmoPikaro

5
약간의 시간을 절약하기 위해 @VinneyKelly가 언급 한 GitHub 리포지토리에서 실행할 스크립트는 migrateToAutomaticPackageRestore.ps1 (매직)입니다!
리가

60

Microsoft는 VS2015에서 'NuGet 패키지 복원 사용'에 대한 지원을 중단했으며 이전 솔루션을 마이그레이션하거나 새 솔루션에 기능을 추가하려면 일부 수동 변경을 수행해야합니다. 새로운 기능은 NuGet Package Restore에 잘 설명되어 있습니다.

기존 프로젝트 (이전에 언급 한대로)에 대한 마이그레이션 안내서도 있습니다. NuGet 마이그레이션 안내서

업그레이드 할 때 :

  1. .nuget 디렉토리를 삭제하지 마십시오.
  2. nuget.exe 및 nuget.targets 파일을 삭제하십시오.
  3. nuget.config를 그대로 두십시오.
  4. NuGet 대상에 대한 참조가있는 각 프로젝트 파일을 직접 제거하십시오. 언급 한 Powershell 스크립트는 좋은 것보다 더 많은 피해를주는 것으로 보입니다.

새 프로젝트를 생성 할 때 :

  1. Visual Studio 2015 솔루션에서 .nuget이라는 솔루션 디렉토리를 만듭니다.
  2. 솔루션 디렉토리 (.sln 파일이있는 위치)의 실제 디렉토리를 작성하고 .nuget이라고합니다 (솔루션 디렉토리는 이름이 같더라도 실제 파일 시스템 디렉토리와 동일하지 않음).
  3. nuget.config라는 .nuget 디렉토리에 파일을 작성하십시오.

  4. 'nuget.config'를 2 단계에서 만든 솔루션 디렉토리에 추가하십시오.

  5. nuget.config 파일에 다음 텍스트를 넣으십시오.

    <?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositorypath" value="$\..\..\..\..\Packages" /> </config> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration>

이 구성 파일을 사용하면 모든 패키지를 한 곳에서 통합 할 수 있으므로 파일 시스템에 동일한 패키지의 20 개의 서로 다른 사본이 없습니다. 상대 경로는 솔루션 디렉토리 아키텍처에 따라 변경되지만 모든 솔루션에 공통 인 디렉토리를 가리켜 야합니다.

5 단계를 수행 한 후 Visual Studio를 다시 시작해야합니다. Nuget은 변경 사항을 인식하지 않습니다.

마지막으로 'Nuget Package Manager for Solutions'를 사용하여 패키지를 제거한 후 다시 설치해야 할 수도 있습니다. 이것이 내가 실행 한 Powershell 스크립트의 부작용인지 또는 NuGet을 다시 시작하는 방법인지 모르겠습니다. 이 모든 단계를 수행 한 후에는 복잡한 빌드 아키텍처가 TFVC에서 프로젝트를 확인할 때 새 패키지를 가져 오는 데 완벽하게 작동했습니다.


1
nuget.targets 파일을 삭제해야하는 이유가없는 경우 일관된 빌드를 얻습니까?
프로이드 닐슨

1
대상은 이제 'nugget.exe'가 제공하는 기능뿐만 아니라 IDE에 통합 된 것으로 보입니다. 여전히 필요한 것은 구성입니다.
Quarkly

1
DRAirey가 언급 한 단계 외에도 다음을 수행해야했습니다 .1) $ \ .. \ .. \ .. \ .. \ Packages 대신 ../../ (Windows 상위 경로 규칙, no 시작시 $ 2) 솔루션 설치를 저장하고 패키지 설치로 nuget.config를 읽고 다시 시작하도록 닫았다가 다시여십시오
Sudhanshu Mishra

이것은 패키지 디렉토리를 커밋 한 새로운 VS2015 프로젝트에 도움이되었으며 NuGet 종속성으로 인해 다른 팀 구성원은 다시 작성할 수 없었습니다.
azec-pdx

1
5 단계를 수행 한 후 Visual Studio를 다시 시작해야합니다. Nuget은 변경 사항을 인식하지 않습니다.
Barry Colebank Jr

35

선택적으로 "packages"폴더에서 모든 폴더를 제거하고 "Manage NuGet Packages for Solution ..."을 선택하십시오. 이 경우 "복원"버튼이 NuGet Packages Windows에 나타납니다.


1
"packages"폴더 안의 폴더를 제거한 후 NuGet Packages 창을 닫았다가 다시 열어보십시오.
Ivan Branets

6
+1 이것은 나를 위해 일했습니다. 복원 버튼은 창의 맨 아래 탭 아래에 나타납니다. "이 솔루션에서 일부 NuGet 패키지가 누락되었습니다. 온라인 패키지 소스에서 복원하려면 클릭하십시오."
루자

너무 간단하고 쉬운 .. 이것은 나를 위해 일했다. 이것은 더 많은 투표 답변이 될 것
같아요

간단하고 쉽습니다. 이것이 답이되어야합니다.
Axel

이 폴더를 .gitignore 파일에 추가하는 것이 좋지 않습니까?
Axel

26

Mike가 이미 언급했듯이 VS2015에는 'Enable NuGet Package Restore'옵션이 없습니다. 복원 프로세스를 수동으로 호출해야합니다. 파일과 디렉토리를 엉망으로 만드는 좋은 방법은 NuGet 패키지 관리 콘솔 을 사용하는 것입니다. '빠른 시작'필드 (일반적으로 오른쪽 상단 모서리)를 클릭 하고을 입력 한 console다음 관리 콘솔을 열고 명령을 입력하십시오.

Update-Package reinstall

솔루션에있는 모든 프로젝트의 모든 패키지가 다시 설치됩니다. 단일 프로젝트를 지정하려면 다음을 입력하십시오.

Update-Package reinstall -ProjectName MyProject

때 물론 이것은 단지 필요 Restore- 버튼 때때로 VS2015에 의해 제공이 - 사용할 수 없습니다. 보다 유용한 업데이트 명령이 여기에 나열되고 설명되어 있습니다. https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages


고마워요, 비슷한 문제가있었습니다. 방금 당신의 절차를 통해 내 문제를 해결했습니다. 대단히 감사합니다
McElie

여기에서도 동일하게 작동하고 여러 곳에서 쓰여진 많은 것들이 필요하지 않습니다.
Harvey Lin

가장 유용한 답변은 여기입니다!
Neo

13

문제가 있거나 패키지가없는 경우 프로젝트를 마우스 오른쪽 단추로 클릭하고 " 솔루션 용 NuGet 패키지 관리 ... "를 선택하면됩니다. 이 버튼을 클릭하면 "복원"이라는 메뉴 막대가 표시되는 화면이 열립니다. 복원

그것을 클릭하면 필요한 패키지가 자동으로 설치됩니다.
나는 이것이 당신이 찾고있는 것이라고 믿고, 이것은 내 문제를 해결했습니다.


3
그러나 그것은 경고 표시 줄이 나타나면 도움이되며 내 경우에는 그렇지 않습니다.
Nicholas Petersen

2
패키지를 수동으로 설치하는 단계는 자동화 된 복원 시점을 놓치게됩니다.
Quarkly

나는 이것이 아마도 받아 들여질만한 대답이어야한다고 생각한다. 그것은 동일한 기능이다
user25064

1
솔루션을 마우스 오른쪽 버튼으로 클릭하여 복원 옵션을 볼 수있었습니다. "솔루션 용 NuGet 패키지 관리"아래에있었습니다. 나를 위해 트릭을 했어.
Daryl

1
나를 위해 작동하지 않습니다-누락 된 nuget 패키지에 관한 솔루션에 경고가 표시되지만 nuget 패키지를 관리해도 패키지를 다운로드하는 옵션이 표시되지 않습니다. 또한 빌드하고 복원 할 수 없습니다. 또한 restore 명령은 아무 것도 수행하지 않습니다.
Markus


6

너겟 패키지가있는 프로젝트를 Vx20XX에서 VS2015로 업그레이드 할 때 너겟 패키지에 문제가있을 수 있습니다.

오류 메시지의 예 :이 프로젝트는이 컴퓨터에서 누락 된 NuGet 패키지를 참조합니다. NuGet Package Restore를 활성화하여 다운로드하십시오.

2016-02-06 업데이트 : 정보에 대한 링크가 있지만 더 이상 작동하지 않습니다. 최근 경로로 문제가 해결 된 것 같습니다. ???

MSBuild 통합 패키지 복원과 자동 패키지 복원 을 수행하는 작은 프로그램을 작성하는 중에 문제가 해결되었습니다.

이 도구의 실행 파일은 여기에서 다운로드 할 수 있습니다 .

결과를 알려주십시오 :-)!

여기에 이미지 설명을 입력하십시오

참조 코드 :

<Window x:Class="FixNuGetProblemsInVs2015.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:FixNuGetProblemsInVs2015"
        mc:Ignorable="d"
        Title="Fix NuGet Packages problems in Visual Studio 2015 (By Eric Ouellet)" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="10"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="0">Root directory of projects</TextBlock>
        <Grid Grid.Row="0" Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <TextBox Grid.Column="0" Name="DirProjects"></TextBox>
            <Button Grid.Column="1" VerticalAlignment="Bottom" Name="BrowseDirProjects" Click="BrowseDirProjectsOnClick">Browse...</Button>
        </Grid>

        <!--<TextBlock Grid.Row="1" Grid.Column="0">Directory of NuGet Packages</TextBlock>
        <Grid Grid.Row="1" Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <TextBox Grid.Column="0" Name="DirPackages"></TextBox>
            <Button Grid.Column="1"  Name="BrowseDirPackages" Click="BrowseDirPackagesOnClick">Browse...</Button>
        </Grid>-->

        <TextBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Name="TxtLog" IsReadOnly="True"></TextBox>

        <Button Grid.Row="3" Grid.Column="0" Click="ButtonRevertOnClick">Revert back</Button>
        <Button Grid.Row="3" Grid.Column="2" Click="ButtonFixOnClick">Fix</Button>
    </Grid>
</Window>


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Linq;
using Application = System.Windows.Application;
using MessageBox = System.Windows.MessageBox;

/// <summary>
/// Applying recommanded modifications in section : "MSBuild-Integrated package restore vs. Automatic Package Restore"
/// of : http://docs.nuget.org/Consume/Package-Restore/Migrating-to-Automatic-Package-Restore
/// </summary>

namespace FixNuGetProblemsInVs2015
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DirProjects.Text = @"c:\prj";
            // DirPackages.Text = @"C:\PRJ\NuGetPackages";
        }

        private void BrowseDirProjectsOnClick(object sender, RoutedEventArgs e)
        {
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            dlg.SelectedPath = DirProjects.Text;
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                DirProjects.Text = dlg.SelectedPath;
            }
        }

        //private void BrowseDirPackagesOnClick(object sender, RoutedEventArgs e)
        //{
        //  FolderBrowserDialog dlg = new FolderBrowserDialog();
        //  dlg.SelectedPath = DirPackages.Text;
        //  if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        //  {
        //      DirPackages.Text = dlg.SelectedPath;
        //  }
        //}

        // private string _dirPackages;

        private void ButtonFixOnClick(object sender, RoutedEventArgs e)
        {
            DoJob(false);
        }

        private void ButtonRevertOnClick(object sender, RoutedEventArgs e)
        {
            DoJob(true);
        }

        private void DoJob(bool revert = false)
        {
            TxtLog.Text = "";

            string dirProjects = DirProjects.Text;
            // _dirPackages = DirPackages.Text;

            if (!Directory.Exists(dirProjects))
            {
                MessageBox.Show("Projects directory does not exists: " + dirProjects);
                return;
            }

            //if (!Directory.Exists(_dirPackages))
            //{
            //  MessageBox.Show("Packages directory does not exists: " + _dirPackages);
            //  return;
            //}

            RecurseFolder(dirProjects, revert);
        }

        private void RecurseFolder(string dirProjects, bool revert = false)
        {
            if (revert)
            {
                Revert(dirProjects);
            }
            else
            {
                FixFolder(dirProjects);
            }

            foreach (string subfolder in Directory.EnumerateDirectories(dirProjects))
            {
                RecurseFolder(subfolder, revert);
            }
        }

        private const string BackupSuffix = ".fix_nuget_backup";

        private void Revert(string dirProject)
        {
            foreach (string filename in Directory.EnumerateFiles(dirProject))
            {
                if (filename.ToLower().EndsWith(BackupSuffix))
                {
                    string original = filename.Substring(0, filename.Length - BackupSuffix.Length);
                    if (File.Exists(original))
                    {
                        File.Delete(original);                                          
                    }
                    File.Move(filename, original);
                    Log("File reverted: " + filename + " ==> " + original);
                }
            }
        }

        private void FixFolder(string dirProject)
        {
            BackupFile(System.IO.Path.Combine(dirProject, "nuget.targets"));
            BackupFile(System.IO.Path.Combine(dirProject, "nuget.exe"));

            foreach (string filename in Directory.EnumerateFiles(dirProject))
            {
                if (filename.ToLower().EndsWith(".csproj"))
                {
                    FromProjectFileRemoveNugetTargets(filename);
                }
            }
        }

        private void BackupFile(string path)
        {
            if (File.Exists(path))
            {
                string backup = path + BackupSuffix;
                if (!File.Exists(backup))
                {
                    File.Move(path, backup);
                    Log("File backup: " + backup);
                }
                else
                {
                    Log("Project has already a backup: " + backup);
                }
            }
        }

        private void FromProjectFileRemoveNugetTargets(string prjFilename)
        {
            XDocument xml = XDocument.Load(prjFilename);

            List<XElement> elementsToRemove = new List<XElement>();

            foreach (XElement element in xml.Descendants())
            {
                if (element.Name.LocalName == "Import")
                {
                    var att = element.Attribute("Project");
                    if (att != null)
                    {
                        if (att.Value.Contains("NuGet.targets"))
                        {
                            elementsToRemove.Add(element);
                        }
                    }
                }

                if (element.Name.LocalName == "Target")
                {
                    var att = element.Attribute("Name");
                    if (att != null && att.Value == "EnsureNuGetPackageBuildImports")
                    {
                        elementsToRemove.Add(element);
                    }
                }
            }

            if (elementsToRemove.Count > 0)
            {
                elementsToRemove.ForEach(element => element.Remove());
                BackupFile(prjFilename);
                xml.Save(prjFilename);
                Log("Project updated: " + prjFilename);
            }
        }

        private void Log(string msg)
        {
            TxtLog.Text += msg + "\r\n";
        }

    }
}

이 프로그램은 내 솔루션에서 많은 프로젝트를 변환하는 데 효과적이었습니다. 최신 버전에는 "NuGet 패키지 디렉토리"필드도 있지만 출력에는 영향을 미치지 않는 것으로 보입니다. 무엇을합니까?
Christoffer Årstrand

죄송합니다. 파일의 내용에 달려 있다고 생각합니다. 아마도 "FromProjectFileRemoveNugetTargets"기능을 추적하고 파일이 영향을받을 수 있는지 확인할 수 있습니까? ! 죄송합니다 나쁜 대답, 난 그냥 내가 성공이 다른 컴퓨터에 두 번 사용 것을 알고 :-( 내가 코딩 기억하지 않습니다.
에릭 Ouellet

5

Visual Studio에서 References를 참조하여 누락 된 패키지를 확인하십시오. 이제 Visual에서 솔루션을 마우스 오른쪽 버튼으로 클릭하고 파일 탐색기에서 열린 폴더를 클릭하십시오. 이제 패키지 폴더를 열고 누락 된 패키지 폴더를 삭제하십시오. Visual Studio를 열고 솔루션을 빌드하십시오. 누락 된 모든 패키지가 복원됩니다. 도움이 되었으면 답변으로 표시하십시오.


4

asp.net 4 프로젝트의 경우 자동 복원으로 이동한다고 가정 할 필요가 없습니다. 오래된 프로젝트의 경우 약간의 변환 작업이 필요하다고 생각합니다.

http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore


당신 말이 맞을 것입니다. 방금 VS2013에서 똑같은 단계를 사용하여 프로젝트를 만들려고했는데 "Nuget 패키지 복원 사용"이있었습니다. 링크 주셔서 감사합니다, 지금 확인하겠습니다.
Dan Beaulieu

4

이 접근법은 저에게 효과적이었습니다.

  • VS2015 닫기
  • VS2013에서 일시적으로 솔루션을 열고 솔루션 을 마우스 오른쪽 버튼으로 클릭하여 nuget 패키지 복원 을 활성화 하십시오 (재 빌드도했지만 필요하지 않은 것 같습니다).
  • VS2013 닫기
  • VS2015에서 솔루션을 다시여십시오.

VS2015에서도 nuget 패키지 복원 을 활성화 했습니다 .


4

샘플 프로젝트 gplus-quickstart-csharp-master 빌드하려고하는 동안 동일한 문제에 직면했습니다 .

나는 오류 메시지를 자세히 보았고이 오류를 극복하는 해결 방법을 찾았습니다.

  • 솔루션 파일을 마우스 오른쪽 버튼으로 클릭하고 Windows 탐색기에서 엽니 다.
  • NuGet.Config, NuGet.exe, NuGet.targets를 사용 하여 .nuget 폴더를 복사 합니다 ( 링크를 다운로드 하거나 다른 프로젝트에서 복사하여 대체)
  • 솔루션을 다시 작성하십시오.

즐겨 !!


4

Ivan Branets 의 솔루션은 본질적으로 이것을 해결 한 것이지만 더 자세한 내용은 공유 할 수 있습니다.

내 경우에는 내가 있었다 VS 2015 사용하여 자동 포장 복원TFS . 이것은 모두 기본 설정입니다.

문제는 다른 개발자가 TFS에서 솔루션을 얻으려고 할 때 일부 패키지가 완전히 복원되지 않았다는 것입니다. (아직 확실하지 않은 이유는 무엇입니까?) 그러나 packages 폴더에는 참조 용 폴더와 NuGet 패키지가 포함되어 있지만 확장되지 않았습니다 (.dll이 포함 된 lib 폴더가 누락되었습니다). 패키지가 복원되는 것을 방해하는 개념은 옳지 않은 개념이었습니다.

참조가 해결되지 않은 것에 대한 노란색 느낌표가 있기 때문에 이것을 인식 할 것입니다.

그래서, 솔루션패키지 내에서 폴더를 삭제는 패키지가 문제를 차단 복원 제거합니다. 그런 다음 최상위 솔루션 수준에서 마우스 오른쪽 버튼을 클릭하여 패키지복원 하는 옵션을 얻을 수 있습니다. 이제 작동합니다.


4

VS를 닫습니다. 패키지 폴더 아래의 모든 것을 삭제하십시오. 솔루션을 다시여십시오. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 'nuget 패키지 관리 ...'를 선택하십시오. 'Nuget Package Manager'창 상단에 노란색 막대가 표시되어 패키지를 복원하라는 메시지가 표시됩니다. 이것은 나를 위해 일했습니다.


3

패키지 관리자 콘솔 (Visual Studio, 도구> NuGet 패키지 관리자> 패키지 관리자 콘솔) : Update-Package -reinstall -ProjectName 명령을 실행하십시오. 여기서 솔루션 탐색기에 나타나는 영향을받는 프로젝트의 이름입니다. 솔루션의 모든 패키지를 복원하려면 Update-Package -reinstall 자체를 사용하십시오. 업데이트 패키지를 참조하십시오. 원하는 경우 단일 패키지를 다시 설치할 수도 있습니다.

에서 https://docs.microsoft.com/en-us/nuget/quickstart/restore


1

패키지를 설치하는 동안 프로그램을 실행 한 결과 일 수도 있습니다. 기본 제공 IIS가 백그라운드에서 실행되는 동안 클릭하면 회색으로 표시됩니다.


1

Visual Studio 2017에서 다른 사람이이 문제를 발견하면 프로젝트가 폴더가 아닌 .sln 파일로 열려 있는지 확인하십시오. Visual Studio는 폴더로 열 경우 설정을 선택하지 않기 때문입니다. git에 Visual Studio 온라인 서비스를 사용하는 경우 기본적으로 발생합니다.


1

대한 .NET 핵심 프로젝트 , 실행 dotnet restore또는 dotnet build에서 명령 NuGet Package Manager Console(자동 복원 실행)

당신은 콘솔을 실행할 수 있습니다

도구> NuGet 패키지 관리자> 패키지 관리자 콘솔


1

나는 사용했다 msbuild /t:restore.


크레딧 및 출처 :

내 문제는 MSBuild와 관련이 있으므로 @Vinney Kelly 의 링크 : MSBuild 통합 솔루션을 자동 패키지 복원으로 마이그레이션

과...

그것은 CHARM처럼 작동했습니다 =]

MSBuild : msbuild /t:restore프로젝트 파일에 나열된 패키지 패키지를 복원 하는 명령을 사용 합니다 ( PackageReference 전용). Visual Studio 2017에 포함 된 NuGet 4.x + 및 MSBuild 15.1+에서만 사용할 수 있습니다. nuget restore그리고 dotnet restore모두 적용 프로젝트에 대해이 명령을 사용합니다.


필자의 경우 / t : restore는 / restore 명령을 사용해야하는 프로젝트를 빌드하지 않습니다.
Kishan Vaishnav

1

다른 모든 방법이 실패하거나 그 이전에 실패한 경우 NuGet이 패키지 소스인지 확인하고 확인할 수 있습니다. VS2017을 설치했지만 기본적으로 존재하지 않습니다. 나는 그것이 이상하다고 생각했다.

  1. 도구-NuGet 패키지 관리자-패키지 관리자 설정
  2. 대화 상자의 왼쪽 탐색 메뉴에서 '패키지 소스'를 클릭하십시오.
  3. 더하기 부호 (+)를 사용하여 Nuget URL을 추가하십시오. https://api.nuget.org/v3/index.json

0

패키지 폴더를 제거하고 (VS2015) 솔루션을 다시 열어야했습니다. 마이그레이션하지 않고 소스 제어에 패키지를 체크인하지 않았습니다. 내가 말할 수있는 것은 엉망이되어서 고쳤습니다.


0

도구 >>> Nuget 패키지 관리자 >>> 일반 을 통해 도움이 되었고 Visual Studio에서 빌드하는 동안 Nuget이 누락 된 패키지를 다운로드하도록 허용 하고 누락 된 패키지자동으로 확인하는 옵션을 선택 하십시오 .

여기에 이미지 설명을 입력하십시오


0

나는 같은 문제에 직면하고있다. Visual Studio 2015에서 만든 MVC 프로젝트를 Visual Studio 2019에서 만든 솔루션에 추가하려고합니다.

Visual Studio 2019에는 이미 기존 프로젝트가 있으므로 VS 2015에서 만든 기존 프로젝트를 추가하면 동일한 오류가 발생합니다. 나는 모든 대답을 시도했지만 문제를 해결하지는 않습니다.

내가 한 것은 솔루션 폴더에 .nuget 폴더를 넣는 것입니다. 원래 폴더의 계층 구조는 다음과 같습니다.

Solution Folder (VS 2019)
  -> MVC 1 Project
  -> MVC 2 Project
  -> MVC 3 Project (Project that I am adding)
         -> .nuget folder (It contains a .nuget folder)

솔루션 폴더 자체에서 .nuget 폴더를 옮길 때 문제가 해결되었습니다.

    Solution Folder (VS 2019)
  -> MVC 1 Project
  -> MVC 2 Project
  -> MVC 3 Project (Project that I am adding)
  -> .nuget folder (It contains a .nuget folder)

0

.NET Core 3.1을 대상으로하는 VS 2019 버전 16.4.4 솔루션

여기에 제안 된 거의 모든 솔루션을 시도한 후 VS를 닫았습니다. 다시 열었을 때 몇 초 후에 모든 것이 정상으로 돌아 왔습니다 ...


-4

더 간단하게 솔루션에 .nuget 폴더를 추가하면 Nuget 패키지 복원이 나타납니다 (nuget.exe가 있어야 작동하는지 확실하지 않습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.