如何在Visual Studio中启用NuGet软件包还原?


272

堆栈上也有类似的帖子,但可能因为我使用的是Visual Studio 2015而无法解决我的问题。

如何获取“启用NuGet软件包还原”选项以出现在VS2015中?

我选择“文件”>“新建项目”,并创建了一个空的ASP.NET Web应用程序。我正在寻找此菜单选项。

在此处输入图片说明

我应该提到的是,我已经在我的项目文件夹中寻找了任何先前存在的nuGet文件,但没有一个。


4
确保您针对解决方案而不是Web项目尝试此操作。默认情况下,只有一个项目时,不显示解决方案
JConstantine 2015年

1
是的,这绝对是一个容易犯的错误,但是我确实确保检查解决方案,我认为可能与2015年有关。当我执行相同的步骤时,VS2013中将提供“启用”选项。
Dan Beaulieu 2015年

2
同样在这里。我什至尝试删除.nuget文件夹,该文件夹重新激活了VS 2013中的Enable NuGet Package Restore选项,但仍然没有任何问题。我试图打开这是在2013年VS创建的现有MVC应用程序
Vinney凯利

4
@justanotherdev如果您提供对新工作流程的引用以使您的注释更富有成效,将很有用。
avantprime

1
我看不到oligofren引用David Ebbo的文章,所以我只是在Notepad ++中打开了sln&csproj文件,并删除了他举例说明的部分。我在VS2015中打开了解决方案,保存文件后,VS提示我重新加载它们,解决方案参考现在可以正常使用,并且可以编译我的解决方案。非常感谢Vinney!
Rich Ward

Answers:


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文件)?
2015年

没有看到.nuget文件夹?请查看有关删除packages文件夹中的文件夹的解决方案。您的程序包可能已恢复一半,而垃圾则阻止了它完全恢复。
格雷格

确实,这就是解决方案。除此之外-在开始构建项目之前,我添加了“ nuget restore”。nuget软件包会自动下载,然后项目构建可以正常进行。
TarmoPikaro 2015年

5
为了节省时间,从@VinneyKelly提到的GitHub存储库执行的脚本是migrationToAutomaticPackageRestore.ps1,它的魔力起作用了!
里加

60

Microsoft已在VS2015中删除了对“启用NuGet软件包还原”的支持,您需要进行一些手动更改才能迁移旧解决方案或将功能添加到新解决方案中。新功能中描述得很好NuGet包还原

这里也有针对现有项目的迁移指南(如前所述):NuGet迁移指南

升级时:

  1. 不要删除.nuget目录。
  2. 删除nuget.exe和nuget.targets文件。
  3. 离开nuget.config。
  4. 手动清除对NuGet目标的任何引用的每个项目文件。提到的Powershell脚本造成的损害似乎大于好处。

创建新项目时:

  1. 在Visual Studio 2015解决方案中,创建一个名为.nuget的解决方案目录。
  2. 创建解决方案目录的实际目录(.sln文件所在的目录),并将其命名为.nuget(请注意,即使解决方案目录具有相同的名称,它也与实际的文件系统目录不同)。
  3. 在.nuget目录中创建一个名为nuget.config的文件。

  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步后,您需要重新启动VisualStudio。Nuget将无法识别所做的更改,除非您这样做。

最后,您可能必须使用“用于解决方案的Nuget程序包管理器”来卸载然后重新安装程序包。我不知道这是我运行的Powershell脚本的副作用,还是只是使NuGet重新投入使用的一种方法。一旦完成所有这些步骤,当我从TFVC中检出项目时,我复杂的构建体系结构就可以完美地降低新软件包的工作量。


1
为什么要删除nuget.targets文件,如果缺少该文件,我会得到一个一致的版本吗?
Frode Nilsen

1
现在,目标以及“ nugget.exe”曾经提供的功能似乎已集成到IDE中。您唯一需要的就是配置。
2015年

1
除了DRAirey提到的步骤外,我还必须执行以下操作:1)代替$ \ .. \ .. \ .. \ .. \ Packages,使用../../(Windows父路径约定,否$在开始处$)2)保存解决方案,关闭并重新打开nuget.config,以供软件包安装读取和使用
Sudhanshu Mishra 2015年

这对我的新VS2015项目有所帮助,在该项目中,我将包dir提交到目录中,并且由于NuGet依赖性,其他团队成员无法重建。
azec-pdx

1
完成第5步后,您需要重新启动VisualStudio。Nuget将无法识别所做的更改,除非您这样做。
巴里·科尔班克(Barry Colebank Jr)2013年

35

(可选)您可以从“程序包”文件夹中删除所有文件夹,然后选择“管理解决方案的NuGet程序包...”。在这种情况下,“恢复”按钮将出现在NuGet软件包Windows上。


1
删除“程序包”文件夹中的文件夹后,尝试关闭并重新打开NuGet程序包窗口。
伊万·布雷内茨

6
+1这对我有用,请注意,还原按钮会在窗口顶部的选项卡下方弹出。说:“此解决方案缺少某些NuGet软件包。单击以从您的在线软件包源中还原。”
伊鲁扎

如此简单和容易..这个工作对我来说..猜猜这应该更投答案:)
Nirman

如此简单容易。这应该是答案。
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/zh-cn/nuget/consume-packages/reinstalling-and-updating-packages


非常感谢,我遇到了类似的问题。我只是通过您的程序解决了我的问题。非常感谢
McElie

同样,这里是唯一可以工作并且不需要到处写一堆东西的人
Harvey Lin

最有用的答案在这里!

13

如果您有任何问题或缺少任何软件包,只需在项目中单击鼠标右键,然后选择“ 为解决方案管理NuGet软件包... ”。单击此按钮后,将打开一个屏幕,您会在其中看到一个菜单栏,显示“还原”: 恢复

单击它,所需的软件包将自动安装。
我相信这就是您要寻找的,这解决了我的问题。


3
但这仅在显示警告栏时才有帮助,在我看来,这没有帮助。
尼古拉斯·彼得森

2
手动安装软件包的步骤完全错过了自动还原的要点。
2015年

我相信这应该是公认的答案,它是相同的功能
user25064

1
通过右键单击解决方案,我能够看到还原选项。它位于“为解决方案管理NuGet软件包”下。为我做了把戏。
达里尔

1
对我不起作用-我在解决方案中看到有关缺少nuget软件包的警告,但是管理nuget软件包并没有为我提供下载它们的选项。我也无法构建和还原。另外,restore命令不执行任何操作。
Markus


6

将带有nuget软件包的项目从Vx20XX升级到VS2015时,您可能会遇到nuget软件包的问题。

错误消息的示例:该项目引用此计算机上缺少的NuGet软件包。启用NuGet软件包还原以下载它们。

更新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'6

对不起,我不知道。我怀疑这将取决于文件的内容。也许您可以跟踪以下功能:“ FromProjectFileRemoveNugetTargets”,看看您的文件是否可能受到影响?对不起,我说不好回答,我不记得我:-(编码我只知道,我成功使用了两次2个不同的计算机上!
埃里克·韦莱

5

转到Visual Studio中的“参考”,看看缺少哪些软件包。现在,右键单击Visual中的解决方案,然后在文件资源管理器中单击打开的文件夹。现在打开程序包文件夹并删除丢失的程序包文件夹。打开Visual Studio,然后构建解决方案。所有丢失的软件包将被还原。如果我有帮助,请将此标记为答案。


4

我想对于asp.net 4项目,我们正在转向自动还原,因此不需要这样做。对于较旧的项目,我认为需要进行一些转换工作。

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


你也许是对的。我只是尝试使用与VS2013中完全相同的步骤来创建项目,并且在那里存在“启用Nuget包还原”。感谢您提供链接,我现在将对其进行检查。
Dan Beaulieu 2015年

4

这种方法对我有用:

  • 关闭VS2015
  • 暂时在VS2013中打开解决方案,并通过右键单击解决方案来启用nuget软件包还原(我也进行了重建,但是我怀疑不需要这样做)。
  • 关闭VS2013
  • 重新打开VS2015中的解决方案

现在,您还已在VS2015中启用了nuget软件包还原


4

在尝试构建示例项目gplus-quickstart-csharp-master时,我遇到了相同的问题

我仔细查看了错误消息,并找到了解决此错误的解决方法,希望这会有所帮助。

  • 右键单击解决方案文件,然后在Windows资源管理器中打开。
  • 使用NuGet.Config,NuGet.exeNuGet.targets复制.nu​​get文件夹(下载链接)或直接从其他项目复制并替换)
  • 尝试重建解决方案。

请享用 !!


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/zh-cn/nuget/quickstart/restore


1

也可能是您尝试安装软件包时运行程序的结果。如果您在内置IIS在后台运行时尝试单击它,则显示为灰色。


1

万一其他人在Visual Studio 2017中发现此问题,请确保该项目是通过.sln文件而不是文件夹打开的,因为如果按文件夹打开Visual Studio不会选择设置。如果您为git使用Visual Studio在线服务,则默认情况下会发生这种情况。


1

对于.NET Core项目,请在其中运行dotnet restoredotnet build命令NuGet Package Manager Console(将自动运行还原)

您可以从以下位置运行控制台

工具> NuGet软件包管理器>软件包管理器控制台


1

我用过msbuild /t:restore


信用和来源:

我的问题与MSBuild有关,所以我关注了@Vinney Kelly的链接:将与MSBuild集成的解决方案迁移到自动软件包还原

和...

像LIKE A 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软件包管理器 >>> 常规帮助我,然后勾选选项允许Nuget下载缺少的软件包,在Visual Studio中构建期间自动检查缺少的软件包

在此处输入图片说明


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)


-4

更简单的是,在您的解决方案中添加.nuget文件夹,然后将显示“ Restore Nuget Packages”(不确定是否需要nuget.exe才能使其正常工作)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.