安装WinForms之后是否可以自动更新Nuget软件包?

时间:2020-07-05 09:32:29

标签: c# nuget nuget-package nuget-update

比方说,我有一个Windows窗体应用程序,其中包含一些重要的Nuget程序包,这些程序包必须保持最新。

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

我已经阅读了有关使用nuget.exe的一些知识,但是更新nuget软件包应将.dll文件放置在安装文件夹中。

2 个答案:

答案 0 :(得分:3)

可以这样做,但您不应该这样做。 NuGet软件包是依赖开发的,而不是要在已编译的应用程序中或在客户现场任意更新,因为

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

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

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

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

答案 1 :(得分:0)

如果它是自动更新,只需考虑一下旧版本的dll是否支持某种方法,而在新版本中,该方法已被删除。

尽管您可以更新软件包的构建时间。

通过选择工具>选项> NuGet软件包管理器,然后在打包还原下的Visual Studio中选择在构建过程中自动检查丢失的软件包来启用自动软件包还原。

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