以编程方式创建packages.config文件

4

我正在以编程方式生成一个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,NuGet软件包还原失败:无法从packages.config解析版本值''

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

错误 2: NuGet包还原失败,项目SampleProject: 无法从'packages.config'中解析版本值'*'

看起来需要指定版本号。希望有人知道一些方法可以欺骗它找到当前版本。


应该可以工作。如果您删除了 targetFramework 属性会发生什么呢?;) - Matías Fidemraizer
移除 targetFramework 似乎不会影响我刚刚发布的错误。不过这是个好想法 :) - Linda Lawton - DaImTo
1个回答

1

您可以使用包的附加属性告诉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 对象来调用升级任务


谢谢您的回答。我已经停止生成packages.config文件,只会告诉用户自己添加NuGet包。 - Linda Lawton - DaImTo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接