1

(我有一种强烈的感觉,这里有一些我不理解的基本内容,所以请多多包涵……)

我在一个包含一些包的网络共享上有一个本地 NuGet 包源,并且我有一个NuGet.Config指向该网络共享的用户文件作为包源。在项目文件夹(git 存储库)中,我有一个packages.config文件,该文件按名称引用此本地提要中的包。我想将此包恢复到此项目文件夹中。

我认为,让这件事变得困难的原因在于这不是一个 Visual Studio 项目。我在常规文本编辑器中使用它,并且有一些 PowerShell 构建脚本。

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

  • 我的存储库应该是可移植的,具有最少的先决条件依赖项
  • 我的存储库不得包含无关的二进制文件或不属于它的代码

因此,我无法将nuget.exe二进制文件提交到我的存储库以使其可移植;相反,我想依赖“现代 Windows 10 环境”的先决条件依赖项,它为我提供了 PowerShell 和内置的 PackageManagement 工具,这些工具能够引导包括 PowerShellGet 和 NuGet 在内的各种提供程序。

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

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

4

1 回答 1

1

您可以从 NuGet 团队的NuGet.Client 存储库中获得灵感,他们有一个configure.ps1 powershell 脚本,用于设置用于开发/构建的存储库,它调用两个自定义 cmdlet Install-NuGet(从固定的 HTTP 源下载 nuget.exe)和然后Restore-SolutionPackages(恢复packages.config文件),两者都在common.ps1文件中定义。

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

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

于 2018-10-22T20:00:39.280 回答