【问题标题】:Visual Studio 2019 restore completed nuget loopVisual Studio 2019 恢复完成的 nuget 循环
【发布时间】:2020-08-30 08:22:21
【问题描述】:

我在使用 C# 多项目解决方案时遇到了 VS2019 专业版 16.5.5 和 16.5.4 的问题。它可以正确编译、测试和执行,但在后台我不断恢复 nuget 包,每隔几秒钟完成一次。 CPU 接近 100%。

我已经尝试过Update-Package -reinstallnuget locals all --clear(来自:How do I fix this NuGet Restart loop in Visual Studio 2017?)、更新 VS、删除我的.vs 文件夹、清理解决方案、再次从 git 签出项目,甚至重新启动。似乎没有任何帮助。

该项目有几个主要项目:两个控制台,一个 AspNetCore,一个 WPF。他们使用标准 2.0 或共享 C# 项目中的通用库。

输出窗口中的包管理器日志有数百个条目,例如:

Time Elapsed: 00:00:00.7441577
========== Finished ==========

Time Elapsed: 00:00:00.8448774
========== Finished ==========

Time Elapsed: 00:00:00.8410551
========== Finished ==========

Time Elapsed: 00:00:00.7351174
========== Finished ==========

Time Elapsed: 00:00:00.7997720
========== Finished ==========

Time Elapsed: 00:00:00.9367757
========== Finished ==========

卸载一些项目会有所帮助,但只是暂时的——直到我再次加载它们。

如何解决不断的 Nuget 包还原问题?

【问题讨论】:

  • 请尝试禁用Extensions-->Manage Extensions 下的任何第三方扩展,以防干扰 nuget 性能。 2)进入Tools-->Options-->Projects and Solutions-->Build and Run-->Set MSBuild project build output verbosity to Detailed查看nuget restore的详细日志,然后找出问题所在。
  • 管理扩展 - 没有任何第三方扩展。 MSBuild 详细日志没有帮助(即使在诊断模式下) - 找不到触发还原的原因。不过,我确实通过其他方式找到了原因,目前正在写作作为答案。

标签: nuget visual-studio-2019


【解决方案1】:

我找到了导致问题的原因。前段时间我尝试向控制台项目添加自动版本控制(在Auto Versioning in Visual Studio 2017 (.NET Core) 的帮助下)。确切地说,我添加到我的.csproj 文件中:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- ... -->
    <VersionPrefix>1.1</VersionPrefix>
    <VersionSuffix>$([System.DateTime]::UtcNow.ToString(yyyyMMddTHHmmss))</VersionSuffix>
  </PropertyGroup>
  <!-- ... -->
</Project>

这是问题的直接原因。注释掉VersionSuffix中的动态表达式,问题就消失了。更有趣的是,更改为yyyyMMddTHHmm(删除ss)也解决了这个问题。不,它并没有将 Nuget 恢复的频率更改为每分钟 - 它完全停止了。

更重要的是,我发现了一个post on Microsoft Developer forums,它详细说明了同样的问题。该帖子已被删除,但我设法将其存档以提供此答案。 该帖子刚刚被移动:Using current datetime as VersionSuffix in csproj causes restoring of packages forever

【讨论】:

【解决方案2】:

我知道您找到了问题的根源,但这里是修复方法,适用于那些希望在其版本号中保留秒数的人。

将以下内容添加到您的 .csproj:

<PropertyGroup>
    <VersionPrefix>1.0.0</VersionPrefix>
    <VersionSuffix Condition="'$(DesignTimeBuild)' != 'true' OR '$(BuildingProject)' == 'true'">beta-$([System.DateTime]::UtcNow.ToString(yyyyMMdd-HHmmss))</VersionSuffix>
</PropertyGroup>

它仅在构建项目时(而不是在设计时)使用正确的版本控制字符串很好地更新所有不同的地方,包括您的 .dll 和 NuGet。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2021-01-20
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多