c# - 以编程方式创建 packages.config

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

我试过删除 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 从您自己的扩展或项目/项目创建向导调用 Update-Package 'YourPackageName'当您的项目或项目项添加到项目和 using the NuGet objects to invoke the upgrade task 时触发您的代码.

关于c# - 以编程方式创建 packages.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33755238/

相关文章:

c# - WPF 数据网格绑定(bind)

c# - 如何在 C# 中编写实现给定接口(interface)的通用容器类?

c# - C#中的基本算术运算是原子的吗

c++ - 尝试登录 Visual Studio 时出现 "Permission Denied"

c++ - 为什么在 void 函数中接受 return throw std::exception()?

.net - CAT.NET 的现状如何?

nuget - 使用二进制内容文件创建 Nuget 包 - 这可能吗?

nuget - Visual Studio 2015 是否支持 Nuget v1 提要

c# - 查看图像不支持给定路径的格式

msbuild - 运行 NuGet 还原时出现错误 "No file format header found."