如何使用内置的nuget PackageManager提供程序执行nuget恢复?

如何使用内置的nuget PackageManager提供程序执行nuget恢复?,nuget,package-management,Nuget,Package Management,(我有一种强烈的感觉,这里有一些基本的东西我不理解,所以请容忍我…) 我在一个网络共享上有一个本地NuGet包提要,该网络共享上有一些包,我有一个UserNuGet.Config文件,该文件指向该网络共享作为包源。在项目文件夹(git repository)中,我有一个packages.config文件,该文件按名称引用了本地提要中的包。我想将此包还原到此项目文件夹中 我认为,这之所以困难,是因为这不是一个VisualStudio项目。我在常规的文本编辑器中使用它,并有一些PowerShell构

(我有一种强烈的感觉,这里有一些基本的东西我不理解,所以请容忍我…)

我在一个网络共享上有一个本地NuGet包提要,该网络共享上有一些包,我有一个User
NuGet.Config
文件,该文件指向该网络共享作为包源。在项目文件夹(git repository)中,我有一个
packages.config
文件,该文件按名称引用了本地提要中的包。我想将此包还原到此项目文件夹中

我认为,这之所以困难,是因为这不是一个VisualStudio项目。我在常规的文本编辑器中使用它,并有一些PowerShell构建脚本

我知道我可以下载nuget.exe二进制文件并将其放在我的路径或工作目录中,然后从命令行执行
nuget restore
,但我试图解决的问题是哲学上的纯粹性。即:

  • 我的存储库应该是可移植的,具有最少的先决条件依赖项
  • 我的存储库不能包含它不拥有的无关二进制文件或代码
因此,我无法将
nuget.exe
二进制文件提交到我的存储库中以使其可移植;相反,我希望依赖“现代Windows 10环境”的先决条件依赖项,它为我提供了PowerShell和内置的PackageManagement工具,这些工具能够引导各种提供商,包括PowerShellGet和NuGet

这似乎是一条正确的道路,因为PackageManagement被设计为任何包管理解决方案的内置统一接口。(但我是否误解了这一点,它实际上只是为了将软件安装到您的操作系统或用户帐户上?我找不到任何能清楚描述这一点的东西。)


那么,是否可以利用内置的PackageManager从Visual Studio范围之外的
packages.config
文件执行
nuget还原
(或等效文件)?或者,如果不是直接的,是否有一个显而易见的/简单的解决方案可以从PackageManager引导到能够完成这种恢复的东西?

您可以从NuGet团队那里获得灵感,他们有一个powershell脚本,可以为开发/构建建立回购,它调用两个自定义cmdlet
Install NuGet
(从固定的HTTP源下载NuGet.exe),然后调用
Restore SolutionPackages
(还原
packages.config
文件),这两个cmdlet都是在一个文件中定义的

因此,您可以使用powershell脚本下载nuget.exe并运行restore。这意味着,在克隆repo之后(有时在拉取之后),开发人员在使用visualstudio构建解决方案之前,需要执行额外的手动操作。但是,如果这是NuGet团队自己的方式,那可能不会太可怕,对吧?至少你可以指出一些先例

如果让开发人员手动运行脚本来执行此操作对您来说是一个问题,那么您可以调查自定义MSBuild目标(从相关csproj文件中包括它,或者只是创建一个),并让MSBuild在生成解决方案时执行此操作。但是,您可能需要花时间确保为自定义目标正确设置,否则会减慢构建时间