以编程方式创建packages.config

时间:2015-11-17 11:00:29

标签: c# visual-studio nuget-package-restore

我以编程方式生成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最新版本是什么,以便我可以在生成时将其添加到我的项目中?

我尝试删除版本并添加版本=“*”两者都没有用。

更新

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

给出以下错误

  

项目SampleProject的NuGet包还原失败:无法执行   解析版本值''来自'packages.config'

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

错误2项目SampleProject的NuGet包还原失败:无法执行   解析'packages.config'

中的版本值'*'

看起来版本是必需的。我希望有人知道某些方法来欺骗它以找到当前的版本。

1 个答案:

答案 0 :(得分: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,在vsix中包含nuget包,并在每次依赖项更改后发布新版本,然后测试新版本是否真正有效。

NuGet中没有系统可以自动更新所有包裹。虽然没有什么能阻止您在项目或项目项目添加到项目时IWizard interface使用using the NuGet objects to invoke the upgrade task从您自己的扩展或项目/项目创建向导中调用Update-Package 'YourPackageName'来触发您的代码