ChatGPT解决这个技术问题 Extra ChatGPT

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

堆栈上有一个 similar post,但它对我的问题没有帮助,可能是因为我使用的是 Visual Studio 2015。

如何让“启用 NuGet 包还原”选项出现在 VS2015 中?

我选择了 File > New Project 并创建了一个空的 ASP.NET Web 应用程序。我正在寻找这个菜单选项。

https://i.stack.imgur.com/uedbb.png

我应该提一下,我已经在我的项目文件夹中查找了任何预先存在的 nuGet 文件,但没有。

确保您是针对您的解决方案而不是 Web 项目尝试此操作。默认情况下,只有一个项目时不显示解决方案
是的,这绝对是一个容易犯的错误,但我确实确保检查解决方案,我认为它可能与 2015 年有关。当我遵循相同的步骤时,启用选项在 VS2013 中可用。
同样在这里。我什至尝试删除重新激活 VS 2013 中的 Enable NuGet Package Restore 选项的 .nuget 文件夹,但仍然没有骰子。我正在尝试打开在 VS 2013 中创建的现有 MVC 应用程序。
@justanotherdev 如果您提供对新工作流程的参考以使您的评论更有成效,那将会很有用。
我没有看到 oligofren 引用的 David Ebbo 的文章,所以我只是在 Notepad++ 中打开了 sln 和 csproj 文件并删除了他说明的部分。我在 VS2015 中打开了解决方案,保存文件后,VS 提示我重新加载它们,我的解决方案引用现在很好,我的解决方案可以编译。非常感谢,文尼!

P
Pang

花了很长时间,但我终于在 Migrating MSBuild-Integrated solutions to Automatic Package Restore 上找到了这个文档,并且我能够使用此处描述的方法解决问题。

从解决方案中删除“.nuget”解决方案目录从 .csproj 或 .vbproj 文件中删除对 nuget.targets 的所有引用。虽然不受官方支持,但如果您有很多需要清理的项目,该文档将链接到 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>

我在这里完全错过了一些东西。当我使用这种方法时,我会在我拥有的每个解决方案中安装大量软件包。我有一个包含 10 个包的解决方案和另一个包含完全相同包的解决方案:创建了两个不同的目录,每个目录都包含 10 个包。使用这种方法,如何将所有包合并到一个目录中(就像旧的 VS2013 方法允许通过编辑 NuGet.Config 文件来实现)?
没有看到 .nuget 文件夹?去看看关于在包文件夹中删除文件夹的解决方案。您的包裹可能已恢复了一半,而垃圾阻止了它完全恢复。
确实,这就是解决方案。除此之外 - 我在开始构建项目之前添加了“nuget restore”。 nuget 包会自动下载,之后项目构建工作正常。
为了节省一点时间,@VinneyKelly 提到的从 GitHub 存储库执行的脚本是 migrateToAutomaticPackageRestore.ps1,它的魔力,有效!
I
Irvin Dominin

Microsoft 已放弃对 VS2015 中“启用 NuGet 包还原”的支持,您需要进行一些手动更改以迁移旧解决方案或将该功能添加到新解决方案中。 NuGet Package Restore 中很好地描述了新功能。

此处还有现有项目(如前所述)的迁移指南:NuGet Migration Guide

升级时:

不要删除 .nuget 目录。删除 nuget.exe 和 nuget.targets 文件。离开 nuget.config。手动清除对 NuGet 目标的任何引用的每个项目文件。提到的 Powershell 脚本似乎弊大于利。

创建新项目时:

在您的 Visual Studio 2015 解决方案中,创建一个名为 .nuget 的解决方案目录。创建解决方案目录的实际目录(.sln 文件所在的位置)并将其命名为 .nuget(请注意,解决方案目录与实际文件系统目录不同,即使它们具有相同的名称)。在 .nuget 目录中创建一个名为 nuget.config 的文件。将“nuget.config”添加到步骤 #2 中创建的解决方案目录。将以下文本放在 nuget.config 文件中:

此配置文件将允许您将所有包合并到一个位置,这样您的文件系统上就不会出现同一个包的 20 个不同副本。相对路径将根据您的解决方案目录架构而改变,但它应该指向所有解决方案共有的目录。

执行第 5 步后,您需要重新启动 Visual Studio。在您这样做之前,Nuget 不会识别更改。

最后,您可能必须使用“Nuget Package Manager for Solutions”来卸载然后重新安装这些包。我不知道这是我运行的 Powershell 脚本的副作用,还是只是让 NuGet 重新启动的一种方法。完成所有这些步骤后,当我从 TFVC 中检查项目时,我复杂的构建架构可以完美地降低新的包。


为什么删除 nuget.targets 文件,当它丢失时我会得到一致的构建吗?
这些目标现在似乎已集成到 IDE 中,以及“nugget.exe”过去提供的功能。您唯一需要的就是配置。
除了 DRAirey 提到的步骤之外,我还必须执行以下操作: 1)而不是 $\..\..\..\..\Packages,使用 ../../(windows 父路径约定,没有$ at the start 2) 保存解决方案,关闭并重新打开 nuget.config 以供 package install 读取和接受
这对我提交包目录的新 VS2015 项目有帮助,而其他团队成员由于 NuGet 依赖项而无法重建。
执行第 5 步后,您需要重新启动 Visual Studio。在您这样做之前,Nuget 不会识别更改。
J
Jack Miller

正如 Mike 已经提到的,在 VS2015 中没有“启用 NuGet 包还原”选项。您必须手动调用恢复过程。一个不错的方法 - 不弄乱文件和目录 - 使用 NuGet 包管理控制台:点击“快速启动”字段(通常在右上角),输入 console,打开管理控制台,输入命令:

Update-Package –reinstall

这将重新安装解决方案中所有项目的所有包。要指定单个项目,请输入:

Update-Package –reinstall -ProjectName MyProject

当然,这仅在 VS2015 提供的 Restore 按钮(有时)不可用时才需要。此处列出并解释了更多有用的更新命令:https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages


非常感谢,我也遇到了类似的问题。我刚刚通过您的程序解决了我的问题。非常感谢你
同样在这里,唯一一个有效的,不需要到处写一堆东西
最有用的答案在这里!
I
Ivan Branets

或者,您可以从“packages”文件夹中删除所有文件夹,然后选择“Manage NuGet Packages for Solution...”。在这种情况下,“还原”按钮会出现在 NuGet 包 Windows 上。


删除“包”文件夹中的文件夹后,尝试关闭并重新打开 NuGet 包窗口。
+1这对我有用,请注意,恢复按钮会在窗口顶部弹出,就在选项卡下方。说:“此解决方案中缺少一些 NuGet 包。单击以从您的在线包源恢复。”
如此简单易行..这对我有用..猜猜这应该是更多投票的答案:)
如此简单易行。这应该是答案。
为我工作。 :)
Y
Yenthe

https://i.imgur.com/cbXbpMx.png

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


但这仅在出现该警报栏时才有帮助,在我的情况下则没有。
手动安装软件包的步骤完全忽略了自动还原的要点。
我相信这可能应该是公认的答案,它是相同的功能
通过右键单击解决方案,我能够看到恢复选项。它位于“管理用于解决方案的 NuGet 包”下。为我做了诀窍。
对我不起作用 - 我在解决方案中看到有关缺少 nuget 包的警告,但管理 nuget 包并没有为我提供下载它们的选项。我也无法构建和恢复。恢复命令也什么都不做。
A
Abdus Salam Azad

使用此命令恢复所有包

dotnet restore

E
Eric Ouellet

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

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

2016-02-06 更新:我有一个指向该信息的链接,但它不再起作用了。我怀疑最近的一条路径已经解决了这个问题???

我解决了我的问题,编写了一个MSBuild-Integrated package restore vs. Automatic Package Restore的小程序

您可以下载工具 here 的可执行文件。

请让我知道结果:-)!

https://i.stack.imgur.com/c7Nqh.png

代码作为参考:

<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 包目录”字段,但似乎不影响输出。它有什么作用?
对不起,我不知道。我怀疑这将取决于文件的内容。也许您可以跟踪函数:“FromProjectFileRemoveNugetTargets”并查看您的文件是否会受到影响?抱歉这个不好的答案,我不记得我编码了什么:-(!我只知道我在两台不同的计算机上成功使用了两次。
M
Manoj Verma

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

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

右键单击解决方案文件并在 Windows 资源管理器中打开。

使用 NuGet.Config、NuGet.exe、NuGet.targets 复制 .nuget 文件夹(下载链接或直接从其他项目复制并替换)

尝试重建解决方案。

享受 !!


L
Luca Morelli

我想对于 asp.net 4 项目,我们正在转向自动恢复,所以没有必要这样做。对于较旧的项目,我认为需要做一些转换工作。

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


你也许是对的。我刚刚尝试使用 VS2013 中完全相同的步骤创建项目,并且“启用 Nuget 包还原”就在那里。谢谢你的链接,我现在就去看看。
S
Sandip Jaiswal

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


H
Håkon Seljåsen

这种方法对我有用:

关闭 VS2015

在VS2013中临时打开解决方案并通过右键单击解决方案启用nuget包还原(我也进行了重建,但我怀疑不需要)。

关闭 VS2013

在VS2015中重新打开解决方案

您现在也已在 VS2015 中启用了 nuget 包还原。


F
Farzad Karimi

Ivan Branets 的解决方案基本上为我解决了这个问题,但可以分享更多细节。

就我而言,我在 VS 2015 中使用 Auto Package restore 和 TFS。这都是非常默认的东西。

问题是,当另一位开发人员试图从 TFS 获得解决方案时,一些软件包并没有完全恢复。 (为什么,我还不太确定。)但是 packages 文件夹包含一个用于参考的文件夹和 NuGet 包,但它没有得到扩展(比如缺少一个包含 .dll 的 lib 文件夹。)这一半在那里,但不是很正确的概念是阻止包被恢复。

您会认识到这一点,因为该引用将带有一个黄色感叹号,表示未解决。

因此,删除包中的文件夹的解决方案消除了包还原阻塞问题。然后您可以右键单击顶级解决方案级别以获取恢复软件包的选项,现在它应该可以工作了。


M
Mandeep Janjua

关闭VS。删除包文件夹下的所有内容。重新打开您的解决方案。右键单击您的项目,选择“管理 nuget 包...”。您将看到“Nuget 包管理器”窗口顶部出现一个黄色条,要求您恢复包。这对我有用。


A
Andreas

包管理器控制台(Visual Studio、工具 > NuGet 包管理器 > 包管理器控制台):运行 Update-Package -reinstall -ProjectName 命令,其中是受影响项目的名称,它显示在解决方案资源管理器中。使用 Update-Package -reinstall 自行恢复解决方案中的所有包。请参阅更新包。如果需要,您还可以重新安装单个软件包。

来自https://docs.microsoft.com/en-us/nuget/quickstart/restore


J
Jack

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


d
douglas.kirschman

如果所有其他方法都失败了(或者可能在此之前),您可能需要检查 NuGet 是否是包源。我安装了 VS2017,默认情况下它不存在。我觉得这有点奇怪。

工具 - NuGet 包管理器 - 包管理器设置 单击对话框左侧导航中的“包源”。使用加号 (+) 添加 Nuget URL:https://api.nuget.org/v3/index.json


A
Andrea Antonangeli

针对 .NET Core 3.1 的 VS 2019 版本 16.4.4 解决方案

在尝试了这里提出的几乎所有解决方案之后,我关闭了 VS。当我重新打开它时,几秒钟后一切恢复正常......


K
Katushai

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


M
MOH3N

对于 .NET Core 项目,在 NuGet Package Manager Console 中运行 dotnet restoredotnet build 命令(它会自动运行恢复)

您可以从运行控制台

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


Y
Yitzchak

我使用了 msbuild /t:restore

信用和来源:

我的问题在于 MSBuild,所以我关注了 @Vinney Kelly 的链接:Migrating MSBuild-Integrated solutions to Automatic Package Restore

和...

这就像一个魅力 =]

MSBuild:使用 msbuild /t:restore 命令恢复项目文件中列出的包包(仅限 PackageReference)。仅在 NuGet 4.x+ 和 MSBuild 15.1+ 中可用,它们包含在 Visual Studio 2017 中。nuget restore 和 dotnet restore 都将此命令用于适用的项目。


在我的情况下 /t:restore 没有构建我必须使用 /restore 命令的项目
C
Chris Hammons

我不得不删除包文件夹关闭并重新打开(VS2015)解决方案。我没有迁移,也没有将包签入源代码管理。我只能说有些事情搞砸了,这解决了它。


A
Anjan Kant

通过工具>>> Nuget包管理器>>>常规帮助我,然后勾选选项允许Nuget下载丢失的包并在Visual Studio中构建期间自动检查丢失的包。

https://i.stack.imgur.com/rP3Pf.png


W
Willy David Jr

我面临同样的问题。我正在尝试将在 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)

P
Paxton

更简单的是,将 .nuget 文件夹添加到您的解决方案中,然后会出现“还原 Nuget 包”(不确定是否需要存在 nuget.exe 才能使其工作)。