あります同様のポストスタック上には、私は、Visual Studio 2015を使用していますので、それはおそらく私の問題を解決しません。
「NuGetパッケージの復元を有効にする」オプションをVS2015に表示するにはどうすればよいですか?
[ファイル]> [新しいプロジェクト]を選択し、空のASP.NET Webアプリケーションを作成しました。このメニューオプションを探しています。
プロジェクトフォルダーで既存のnuGetファイルを探しましたが、何もありません。
あります同様のポストスタック上には、私は、Visual Studio 2015を使用していますので、それはおそらく私の問題を解決しません。
「NuGetパッケージの復元を有効にする」オプションをVS2015に表示するにはどうすればよいですか?
[ファイル]> [新しいプロジェクト]を選択し、空のASP.NET Webアプリケーションを作成しました。このメニューオプションを探しています。
プロジェクトフォルダーで既存のnuGetファイルを探しましたが、何もありません。
回答:
時間がかかりすぎましたが、MSBuild統合ソリューションの自動パッケージ復元への移行に関するこのドキュメントをようやく見つけ、ここで説明する方法を使用して問題を解決することができました。
'.nuget'
ソリューションからソリューションディレクトリを削除するnuget.targets
からへのすべての参照を削除します。正式にはサポートされていませんが、クリーンアップが必要なプロジェクトが多数ある場合、ドキュメントはPowerShellスクリプトにリンクしています。私は手作業で鉱山を手動で編集したので、自分の体験についてフィードバックを与えることはできません。.csproj
.vbproj
ファイルを手作業で編集する場合は、次のものが必要です。
ソリューションファイル(.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>
マイクロソフトはVS2015の「Enable NuGet Package Restore」のサポートを終了しました。古いソリューションを移行するか、新しいソリューションに機能を追加するには、手動で変更する必要があります。新機能は、NuGet Package Restoreでかなりよく説明されていますます。
(前述の)既存のプロジェクトの移行ガイドもここにあります:NuGet移行ガイド
アップグレード時:
新しいプロジェクトを作成する場合:
nuget.configというファイルを.nugetディレクトリに作成します。
手順2で作成したソリューションディレクトリに「nuget.config」を追加します。
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>
この構成ファイルを使用すると、すべてのパッケージを1か所に統合できるため、同じパッケージの20の異なるコピーがファイルシステム上に浮かぶことはありません。相対パスは、ソリューションディレクトリアーキテクチャによって異なりますが、すべてのソリューションに共通のディレクトリを指す必要があります。
手順5を実行した後、Visual Studioを再起動する必要があります。そうするまで、Nugetは変更を認識しません。
最後に、「Nuget Package Manager for Solutions」を使用してパッケージをアンインストールしてから再インストールする必要がある場合があります。これが実行したPowershellスクリプトの副作用なのか、NuGetを元に戻すための単なる方法なのかはわかりません。これらの手順をすべて実行すると、TFVCからプロジェクトをチェックアウトしたときに、複雑なビルドアーキテクチャが新しいパッケージを完全に停止するのに問題なく機能しました。
必要に応じて、「packages」フォルダーからすべてのフォルダーを削除し、「Manage NuGet Packages for Solution ...」を選択できます。この場合、NuGetパッケージウィンドウに[復元]ボタンが表示されます。
Mikeがすでに述べたように、VS2015には「NuGetパッケージの復元を有効にする」オプションはありません。手動で復元プロセスを呼び出す必要があります。ファイルやディレクトリをいじることなく、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パッケージを管理...」を選択するだけです。。これをクリックすると画面が開き、「復元」というメニューバーが表示されます。
それをクリックすると、必要なパッケージが自動的にインストールされます。
これがあなたが探しているものだと思います。これで私の問題は解決しました。
nugetパッケージを含むプロジェクトをVx20XXからVS2015にアップグレードする場合、nugetパッケージに問題がある可能性があります。
エラーメッセージの例:このプロジェクトは、このコンピューターにない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の[参照]に移動して、不足しているパッケージを確認します。VisualでSolutionを右クリックし、ファイルエクスプローラーで開いているフォルダーをクリックします。次に、パッケージフォルダーを開き、不足しているパッケージフォルダーを削除します。ビジュアルスタジオを開き、ソリューションを構築します。不足しているパッケージはすべて復元されます。私が助けたなら、これを答えとしてマークしてください。
asp.net 4プロジェクトでは自動復元に移行しているので、これは必要ありません。古いプロジェクトの場合、変換するために少し作業が必要だと思います。
http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore
サンプルプロジェクトgplus-quickstart-csharp-masterをビルドしようとしたときに、同じ問題に直面しました。
エラーメッセージを詳しく調べて、このエラーを回避することによる回避策を見つけました。うまくいけば、これが役立つでしょう。
楽しい !!
イヴァン・ブラネッツのソリューションは本質的に私にとってこれを修正したものですが、いくつかの詳細を共有できます。
私の場合、自動パッケージ復元とTFSを使用してVS 2015にいました。これはすべてかなりデフォルトの設定です。
問題は、別の開発者がTFSからソリューションを取得しようとしたときに、一部のパッケージが完全に復元されないことでした。(なぜ、私はまだよくわかりません。)しかし、packagesフォルダーには、参照用のフォルダーとNuGetパッケージが含まれていましたが、展開されていませんでした(たとえば、.dllを含むlibフォルダーが見つからなかったとします)。そこにはありますが、パッケージが復元されるのを妨げるという非常に適切な概念がありませんでした。
参照には解決されていないことを示す黄色の感嘆符が付いているため、これを認識できます。
したがって、パッケージ内のフォルダーを削除する解決策は、パッケージの復元のブロックの問題を削除します。次に、最上位のソリューションレベルで右クリックして、パッケージを復元するオプションを取得できます。これで機能するはずです。
VSを閉じます。パッケージフォルダの下のすべてを削除します。ソリューションを再開します。プロジェクトを右クリックし、「nugetパッケージの管理...」を選択します。「Nuget Package Manager」ウィンドウの上部に黄色のバーが表示され、パッケージを復元するように求められます。これでうまくいきました。
パッケージマネージャーコンソール(Visual Studio、[ツール]> [NuGetパッケージマネージャー]> [パッケージマネージャーコンソール]):Update-Package -reinstall -ProjectNameコマンドを実行します。ソリューションエクスプローラーに表示される、影響を受けるプロジェクトの名前です。Update-Package -reinstallを単独で使用して、ソリューション内のすべてのパッケージを復元します。Update-Packageを参照してください。必要に応じて、単一のパッケージを再インストールすることもできます。
使用しましたmsbuild /t:restore
。
私の問題はMSBuildにあったので、@ Vinney Kellyのリンクをたどりました:自動パッケージ復元へのMSBuild統合ソリューションの移行
そして...
それはチャームのように機能しました=]
MSBuild:
msbuild /t:restore
コマンドを使用して、プロジェクトファイルにリストされているパッケージパッケージを復元します(PackageReferenceのみ)。Visualに含まれているNuGet 4.x +およびMSBuild 15.1+でのみ利用可能 Studio 2017にます。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)
VS 2019バージョン16.4.4 .NET Core 3.1を対象としたソリューション
ここで提案されたほとんどすべてのソリューションを試した後、私はVSを閉じました。私がそれを再び開いたとき、数秒後にすべてが正常に戻った...