거기의 유사한 포스트 스택은하지만 난 비주얼 스튜디오 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 디렉토리를 삭제하지 마십시오.
- nuget.exe 및 nuget.targets 파일을 삭제하십시오.
- nuget.config를 그대로 두십시오.
- NuGet 대상에 대한 참조가있는 각 프로젝트 파일을 직접 제거하십시오. 언급 한 Powershell 스크립트는 좋은 것보다 더 많은 피해를주는 것으로 보입니다.
새 프로젝트를 생성 할 때 :
- Visual Studio 2015 솔루션에서 .nuget이라는 솔루션 디렉토리를 만듭니다.
- 솔루션 디렉토리 (.sln 파일이있는 위치)의 실제 디렉토리를 작성하고 .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 패키지 관리 … “를 선택하면됩니다. 이 버튼을 클릭하면 “복원”이라는 메뉴 막대가 표시되는 화면이 열립니다.
그것을 클릭하면 필요한 패키지가 자동으로 설치됩니다.
나는 이것이 당신이 찾고있는 것이라고 믿고, 이것은 내 문제를 해결했습니다.
답변
모든 패키지를 복원하려면이 명령을 사용하십시오.
dotnet restore
답변
너겟 패키지가있는 프로젝트를 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";
}
}
}