是否可以在安装 WinForms 后自动更新 Nuget 包?

Is it possible to automatically update Nuget packages after a WinForms installation?

假设我有一个 windows 表单应用程序,其中包含一些重要且需要保持最新的 Nuget 包。

是否可以通过某种方式从非开发环境以编程方式更新 Nuget 包?对于非开发环境,我指的是 运行 WinForms 应用程序(已安装在他们的电脑上)的随机用户。

我已经阅读了一些关于使用 nuget.exe 的内容,但是更新 nuget 包应该会导致 .dll 文件被放置在安装文件夹中。

如果是自动更新,就想想老版本的dll是不是支持某些方法,新版本已经去掉了。

尽管您可以在构建时更新包。

通过选择“工具”>“选项”>“NuGet 包管理器”启用自动包恢复,然后在“包恢复”下选择“在 Visual Studio 构建期间自动检查丢失的包”。

参考:https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore#restore-packages-automatically-using-visual-studio

可以那样做,但你不应该那样做。 NuGet 包是开发依赖项,不能在已编译的应用程序或客户站点中任意更新,因为

  • 您不能确定您的应用程序是否可以使用更新后的程序集,因为它们可能会引入一些更改,这些更改会在 运行 时导致崩溃或意外行为。
  • NuGet 包不仅包括程序集,还包括可能依赖于 MS Build 或其他工具的构建脚本和资源,这些工具 运行 在您的开发环境中部署甚至包含在您自己的程序集中,例如嵌入式资源。
  • 包依赖于程序集和其他包。您还需要更新依赖项,并且有很大的可能破坏它。
  • 您需要在发布您的应用程序时包含 NuGet CLI 可执行文件,并且您的客户需要允许拉取和安装包。
  • 安装包而不先测试它们可能会损害您的应用程序的质量,也可能会引入安全问题。请记住,您可能正在处理来自潜在 public 包源的可执行文件。

也就是说,不要这样做。相反,遵循负责任的软件开发周期,在交付之前更新软件包并全面测试您的应用程序,并经常向您的客户提供 整个 应用程序的更新。

然而,出于教育目的,您可以使用 Nuget CLI 工具在本地安装软件包,在此示例中为 nuget.exe。您需要指定包标识符、输出目录和框架,例如 .NET Franmework 4.7.2 的 net472。这会将内容以及包本身提取到包文件夹结构中的输出文件夹中,该文件夹结构与您的目标目录结构不匹配。从那里,您需要将所需的资产复制到安装目录中,例如用一个复制脚本。这不仅不是正确的做法,而且非常麻烦,而且很可能被认为是失败的。

nuget install <PackageId> -OutputDirectory <OutputDirectory> -Framework <Framework>