【问题标题】:Require .csproj nuget packages to exist when building solution构建解决方案时需要存在 .csproj nuget 包
【发布时间】:2021-07-02 17:35:17
【问题描述】:

我正在创建一个应用程序来自动更新解决方案中的 nuget 包并构建它以确保它们仍然兼容。

场景:

<PackageReference Include="Dapper" Version="1.50.5" /> 使用正确的包版本清理/构建包。成功了。

然后我用垃圾文本编辑 .csproj 中的版本。

<PackageReference Include="Dapper" Version="dasdasdasdqw3" /> 它仍然成功。但是它确实记录了错误: Error occurred while restoring NuGet packages: Invalid restore input. Missing required property 'Name'.

我的理解是它使用的是\.nuget\packages文件夹中之前成功的版本。

如果无法恢复包而不涉及从\.nuget\packages 中删除它,是否有办法使构建失败?

【问题讨论】:

  • 是否有与该消息相关的警告或错误代码?我的猜测是 error 实际上是一个警告
  • 你是使用了非sdk net framework项目,还是带有packagereference的新sdk net core项目?

标签: c# visual-studio msbuild nuget


【解决方案1】:

假设您使用的是 net core 项目。

首先,确保您已在工具-->选项-->Nuget包管理器下启用这两个选项-->常规

其实,当你更改版本时,vs会检测到更改并使用当前版本,不会使用\.nuget\packages下的最新有效包。在我这边,它失败了。

右键单击您的项目属性-->卸载项目-->编辑项目文件和然后从1.50.5 更改为adadd。然后重新加载你的项目,你会发现项目有一个无效的nuget版本,叫做asda

构建过程成功失败。您应该点击Rebuild而不是Build按钮。

========

如果您在solution explorer下没有看到nuget包版本显示的UI,您可以卸载项目,然后重新加载您的项目。稍等片刻即可获得更改。

此外,您可以在项目Properties下添加dotnet restore命令-->构建事件-->Pre-Build事件命令行使其更准确。

要自动使用最新的更新版本,您可以使用Floating Versions

试试这个:

<PackageReference Include="Dapper" Version="*" />

它将更新 nuget 包以使用 nuget 包源提要下的最新版本,而不是缓存 \.nuget\packages 中的最新版本。重新加载项目时,稍等片刻,您将看到更改为自动使用最新的 nuget 版本。

【讨论】:

  • 谢谢你写这篇文章。使用 msbuild 的 restore 参数对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2022-11-30
  • 1970-01-01
  • 2019-10-21
  • 2011-01-26
  • 1970-01-01
相关资源
最近更新 更多