以编程方式创建软件包.config

本文关键字:软件包 config 创建 方式 编程 | 更新日期: 2023-09-27 18:22:09

我正在以编程方式生成一个Visual Studio项目。有问题的项目需要一些Nuget包。

我创建了一个名为packages.config:的文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
</packages>

项目第一次运行时,它将下载包。问题是,如果发布了新版本,它将始终下载7.0.1版本。

有没有办法告诉它获得最新版本?有没有一种方法可以通过编程方式询问NuGet最新版本是什么,这样我就可以在生成项目时将其添加到项目中?

我尝试过删除Version和添加Version="*",两者都不起作用。

更新

<package id="Newtonsoft.Json"  targetFramework="net45" />

给出以下错误

项目SampleProject:Unable的NuGet包还原失败分析来自"packages.config"的版本值"

<package id="Newtonsoft.Json" version="*"  targetFramework="net45" />

错误2项目SampleProject:Unable的NuGet包还原失败无法分析来自"packages.config"的版本值"*"

似乎需要该版本。我希望有人知道一些欺骗它找到当前版本的方法。

以编程方式创建软件包.config

您可以使用包上的附加属性告诉NuGet允许升级到包的哪个版本:

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="SomePackage" version="2.1.0" allowedVersions="[2,3)" />
</packages>

但这仍然不会自动升级到最新版本的软件包,因为可能会有突破性的更改。它将允许您的用户相对安全地升级到更高版本,因为您明确告诉他们您已经测试了这些更高版本或相信作者不会做出破坏性的更改。另请参阅:https://docs.nuget.org/create/versioning

目前,将包锁定到特定的版本范围需要手动编辑packages.config文件,并且无法通过UI完成。

官方的方法是将项目打包为vsix,将nuget包包含在vsix中,并在测试新版本是否有效后,在每次依赖项发生变化时发布新版本。

NuGet中没有一个系统可以自动更新您的所有软件包。尽管没有什么可以阻止您从自己的扩展或项目/项创建向导调用Update-Package 'YourPackageName',当您的项目或项目项添加到项目中时,使用IWizard接口触发代码,并使用NuGet对象调用升级任务。