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

我尝试删除版本并添加版本=“*”两者都没有工作.

更新:

<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从您自己的扩展或项目/项目创建向导调用Update-Package’YourPackageName’,以便在项目或项目项目添加到项目和using the NuGet objects to invoke the upgrade task时触发您的代码.

点赞