首页 > 解决方案 > 安装 WinForms 后是否可以自动更新 Nuget 包?

问题描述

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

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

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

标签: c#nugetnuget-packagenuget-update

解决方案


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

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

话虽如此,不要这样做。相反,遵循负责任的软件开发周期,在交付之前更新软件包并测试您的应用程序,并为您的客户提供整个应用程序的频繁更新。

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

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

推荐阅读