nuget - 如何在 VS 之外正确安装 nuget 包并跟踪它们?

标签 nuget build-process

我正在尝试在 Visual Studio 之外使用 nuget.exe 作为我们构建基础结构的一部分。这个想法是,各种构建工具由初始化工作副本的 Bootstrap 脚本获取。 Bootstrap 通过使用指定所需工具及其版本的文件来完成此操作。

损坏的方法 1 - 使用手动编辑的 packages.config

起初,保留手动编辑的 packages.config 文件并在引导期间使用 nuget Restore 安装它们似乎是个好主意。但是,这对于具有依赖项的工具不起作用,除非我也在 packages.config 中列出了每个依赖项,这是一种可行的艰巨方法,因为我发现没有简单的方法来递归查找包的所有依赖项。

另请参阅using nuget.exe commandline to install dependency .

损坏的方法 2 - 使用 nuget install 更新 packages.config

第二个想法是使用 nuget install 安装软件包,并让该命令更新 packages.config,与中的 Install-Package cmdlet 非常相似包管理器控制台。但是,令人惊讶的是,nuget install 不支持此功能!它要么采用 packages.config 或包 ID 作为参数,但我发现无法使用新包及其依赖项更新 packages.config

这个问题也可以在另一个(两年前的)SO问题中找到,参见 nuget.exe install not updating packages.config (or .csproj)? .

有没有一种可行的(且非hacky)方法?

这一定是很多人在 VS 之外使用 nuget 时面临的问题,那么在这种情况下最好的方法是什么?

当然,我可以只解析packages.config并为每个包发出nuget install,但我真的不想重新发明依赖项nuget 的管理部分,这就是我首先使用 nuget 的目的。因此,我感觉要么 -WithDependency 开关 nuget Restore-UpdatePackagesConfig 开关 nuget install 丢失...

请注意,还有其他关于上述损坏方法的问题。我想知道解决根本问题的最佳方法是什么,即管理具有 VS 外部依赖项的包。

最佳答案

nuget install 当前未对项目文件进行更改。

nuget install 可用于恢复packages.config 文件中列出的NuGet 包或下载并解压它们。

如果您不需要修改项目,那么读取packages.config 文件中的包并调用nuget install 的解决方案似乎是一个合理的方法。

如果您需要修改项目,那么您可以查看以下内容之一:

  1. Ripple - 一个为 NuGet 添加额外功能的命令行工具。它有一个与 nuget install 类似的ripple install 命令行,但它也会更新项目文件。它具有许多其他功能来支持构建服务器,因此这可能是一个不错的选择。
  2. NuGet packages outside of Visual Studio with SharpDevelop - 这是我进行的一项实验,目的是看看是否可以在不使用 Visual Studio 的情况下从命令行实现完整的 NuGet 支持,包括 PowerShell 脚本。它使用 PowerShell 和大量 SharpDevelop。
  3. 自定义 NuGet.exe 来执行您需要的操作。例如,nuget update 确实会修改项目文件(至少对于文件引用),但不会运行 PowerShell 脚本。因此,您可以获取 NuGet.exe 源代码并对其进行扩展。

上述中只有 3) 可以满足您的需求。另外两个需要一些工作才能从packages.config 文件或其他列表中读取软件包,然后安装它们。

关于nuget - 如何在 VS 之外正确安装 nuget 包并跟踪它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25322624/

相关文章:

eclipse - 在 ant 运行期间自动禁用 eclipse 中的 "build automatically"

c# - 如何通过 NuGet 包共享源代码以用于 .NET Core 项目

caching - 'Nuget.Proxy Cache' 的类型初始化程序引发异常

.net - 你如何在 VS2017 中引用 .net 项目中的 netstandard 项目?

asp.net-core - 如何防止安装与100%.Net Core 2.0不兼容的nuget软件包?

svn - Maven 版本、subversion 分支和本地存储库

visual-studio-2008 - 如何使用 MSBuild 发布 Web 项目?

c# - 无法在 VS2012 上安装 HtmlAgilityPack

build-process - 如何让 Jenkins 将工件复制到动态目录?

android - 在构建过程中区分 Android app.gradle 文件中的 productFlavors