以编程方式创建 packages.config

Programmatically create packages.config

我正在以编程方式生成一个 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" />

给出如下错误

NuGet Package restore failed for project SampleProject: Unable to parse version value '' from 'packages.config'

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

Error 2 NuGet Package restore failed for project SampleProject: Unable to parse version value '*' from 'packages.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,在 vsix 中包含 nuget 包,并在每次依赖项发生变化时发布新版本,并测试新版本是否确实有效。

NuGet 中没有可自动更新所有包的系统。尽管没有什么能阻止您使用 IWizard interface to trigger your code when your project or project item is added to the project and using the NuGet objects to invoke the upgrade task.

从您自己的分机或 project/item 创建向导调用 Update-Package 'YourPackageName'