거기의 유사한 포스트 스택은하지만 난 비주얼 스튜디오 2015 사용하고 있기 때문에 아마도 내 문제에 도움이되지 않습니다.
VS2015에 "NuGet 패키지 복원 사용"옵션을 표시하려면 어떻게합니까?
File> New Project를 선택하고 빈 ASP.NET Web Application을 만들었습니다 . 이 메뉴 옵션을 찾고 있습니다.
내 프로젝트 폴더에서 기존의 nuGet 파일을 찾았지만 아무것도 없다는 것을 언급해야합니다.
거기의 유사한 포스트 스택은하지만 난 비주얼 스튜디오 2015 사용하고 있기 때문에 아마도 내 문제에 도움이되지 않습니다.
VS2015에 "NuGet 패키지 복원 사용"옵션을 표시하려면 어떻게합니까?
File> New Project를 선택하고 빈 ASP.NET Web Application을 만들었습니다 . 이 메뉴 옵션을 찾고 있습니다.
내 프로젝트 폴더에서 기존의 nuGet 파일을 찾았지만 아무것도 없다는 것을 언급해야합니다.
답변:
너무 오래 걸렸지 만 마침내 MSBuild 통합 솔루션을 자동 패키지 복원 으로 마이그레이션 에 대한이 문서를 찾았 으며 여기에 설명 된 방법을 사용하여 문제를 해결할 수있었습니다.
'.nuget'
솔루션 에서 솔루션 디렉토리를 제거하십시오.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>
Microsoft는 VS2015에서 'NuGet 패키지 복원 사용'에 대한 지원을 중단했으며 이전 솔루션을 마이그레이션하거나 새 솔루션에 기능을 추가하려면 일부 수동 변경을 수행해야합니다. 새로운 기능은 NuGet Package Restore에 잘 설명되어 있습니다.
기존 프로젝트 (이전에 언급 한대로)에 대한 마이그레이션 안내서도 있습니다. NuGet 마이그레이션 안내서
업그레이드 할 때 :
새 프로젝트를 생성 할 때 :
nuget.config라는 .nuget 디렉토리에 파일을 작성하십시오.
'nuget.config'를 2 단계에서 만든 솔루션 디렉토리에 추가하십시오.
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에서 프로젝트를 확인할 때 새 패키지를 가져 오는 데 완벽하게 작동했습니다.
선택적으로 "packages"폴더에서 모든 폴더를 제거하고 "Manage NuGet Packages for Solution ..."을 선택하십시오. 이 경우 "복원"버튼이 NuGet Packages Windows에 나타납니다.
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
문제가 있거나 패키지가없는 경우 프로젝트를 마우스 오른쪽 단추로 클릭하고 " 솔루션 용 NuGet 패키지 관리 ... "를 선택하면됩니다. 이 버튼을 클릭하면 "복원"이라는 메뉴 막대가 표시되는 화면이 열립니다.
그것을 클릭하면 필요한 패키지가 자동으로 설치됩니다.
나는 이것이 당신이 찾고있는 것이라고 믿고, 이것은 내 문제를 해결했습니다.
너겟 패키지가있는 프로젝트를 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";
}
}
}
Visual Studio에서 References를 참조하여 누락 된 패키지를 확인하십시오. 이제 Visual에서 솔루션을 마우스 오른쪽 버튼으로 클릭하고 파일 탐색기에서 열린 폴더를 클릭하십시오. 이제 패키지 폴더를 열고 누락 된 패키지 폴더를 삭제하십시오. Visual Studio를 열고 솔루션을 빌드하십시오. 누락 된 모든 패키지가 복원됩니다. 도움이 되었으면 답변으로 표시하십시오.
asp.net 4 프로젝트의 경우 자동 복원으로 이동한다고 가정 할 필요가 없습니다. 오래된 프로젝트의 경우 약간의 변환 작업이 필요하다고 생각합니다.
http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore
샘플 프로젝트 gplus-quickstart-csharp-master 빌드하려고하는 동안 동일한 문제에 직면했습니다 .
나는 오류 메시지를 자세히 보았고이 오류를 극복하는 해결 방법을 찾았습니다.
즐겨 !!
Ivan Branets 의 솔루션은 본질적으로 이것을 해결 한 것이지만 더 자세한 내용은 공유 할 수 있습니다.
내 경우에는 내가 있었다 VS 2015 사용하여 자동 포장 복원 및 TFS . 이것은 모두 기본 설정입니다.
문제는 다른 개발자가 TFS에서 솔루션을 얻으려고 할 때 일부 패키지가 완전히 복원되지 않았다는 것입니다. (아직 확실하지 않은 이유는 무엇입니까?) 그러나 packages 폴더에는 참조 용 폴더와 NuGet 패키지가 포함되어 있지만 확장되지 않았습니다 (.dll이 포함 된 lib 폴더가 누락되었습니다). 패키지가 복원되는 것을 방해하는 개념은 옳지 않은 개념이었습니다.
참조가 해결되지 않은 것에 대한 노란색 느낌표가 있기 때문에 이것을 인식 할 것입니다.
그래서, 솔루션 의 패키지 내에서 폴더를 삭제는 패키지가 문제를 차단 복원 제거합니다. 그런 다음 최상위 솔루션 수준에서 마우스 오른쪽 버튼을 클릭하여 패키지 를 복원 하는 옵션을 얻을 수 있습니다. 이제 작동합니다.
패키지 관리자 콘솔 (Visual Studio, 도구> NuGet 패키지 관리자> 패키지 관리자 콘솔) : Update-Package -reinstall -ProjectName 명령을 실행하십시오. 여기서 솔루션 탐색기에 나타나는 영향을받는 프로젝트의 이름입니다. 솔루션의 모든 패키지를 복원하려면 Update-Package -reinstall 자체를 사용하십시오. 업데이트 패키지를 참조하십시오. 원하는 경우 단일 패키지를 다시 설치할 수도 있습니다.
에서 https://docs.microsoft.com/en-us/nuget/quickstart/restore
나는 사용했다 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
모두 적용 프로젝트에 대해이 명령을 사용합니다.
다른 모든 방법이 실패하거나 그 이전에 실패한 경우 NuGet이 패키지 소스인지 확인하고 확인할 수 있습니다. VS2017을 설치했지만 기본적으로 존재하지 않습니다. 나는 그것이 이상하다고 생각했다.
나는 같은 문제에 직면하고있다. 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)
.NET Core 3.1을 대상으로하는 VS 2019 버전 16.4.4 솔루션
여기에 제안 된 거의 모든 솔루션을 시도한 후 VS를 닫았습니다. 다시 열었을 때 몇 초 후에 모든 것이 정상으로 돌아 왔습니다 ...