在Visual Studio 2019 16.2中无法加载文件或程序集Microsoft.VisualStudio.Coverage.Analysis。

13

我最近安装了VS2019 Prof 16.2,当加载.coverage文件时遇到以下错误:

最近我安装了VS2019 Prof 16.2版本,在加载.coverage文件时出现了下面的错误:

(Note: Both translations are acceptable, as they convey the same meaning in Chinese.)
Microsoft Visual Studio
Exception was thrown: Could not load file or assembly 'Microsoft.VisualStudio.Coverage.Analysis,
Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or
one of its dependencies. The system cannot find the file specified.

我知道通常情况下(对于先前版本的VS),这意味着你需要先运行测试,然后再加载覆盖文件,但是现在在2019 16.2上不起作用。然而,在VS2017 Community 15.9.14中加载相同的覆盖文件是有效的。

Microsoft.VisualStudio.Coverage.Analysis.dll位于C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform,版本为16.0.28223.3002

是否还有其他人遇到了这个问题?

一个配置以重现问题的测试项目可以在我的git上找到https://github.com/miqm/playground/tree/master/SchedulingApp
要生成.coverage,我运行dotnet test -s Default.runsettings,然后使用“文件”->“打开”将其加载到VS中。

我尝试启用/logs来运行VS,但没有出现任何有意义的内容。我只看到了在我尝试打开覆盖率时的日志:

<entry>
    <record>777</record>
    <time>2019/08/03 20:48:17.804</time>
    <type>Information</type>
    <source>VisualStudio</source>
    <description>Begin package load [Microsoft.VisualStudio.TestTools.TestCaseManagement.QualityToolsPackage, Microsoft.VisualStudio.QualityTools.TestCaseManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]</description>
    <guid>{A9405AE6-9AC6-4F0E-A03F-7AFE45F6FCB7}</guid>
  </entry>
  <entry>
    <record>778</record>
    <time>2019/08/03 20:48:18.097</time>
    <type>Information</type>
    <source>VisualStudio</source>
    <description>Begin package load [Microsoft.VisualStudio.TestTools.Tips.TuipPackage.TuipPackage, Microsoft.VisualStudio.QualityTools.Tips.TuipPackage, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]</description>
    <guid>{52CBD135-1F97-2580-011F-C7CD052E44DE}</guid>
  </entry>
  <entry>
    <record>779</record>
    <time>2019/08/03 20:48:18.152</time>
    <type>Information</type>
    <source>VisualStudio</source>
    <description>End package load [Microsoft.VisualStudio.TestTools.Tips.TuipPackage.TuipPackage, Microsoft.VisualStudio.QualityTools.Tips.TuipPackage, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]</description>
    <guid>{52CBD135-1F97-2580-011F-C7CD052E44DE}</guid>
  </entry>
  <entry>
    <record>780</record>
    <time>2019/08/03 20:48:18.164</time>
    <type>Information</type>
    <source>VisualStudio</source>
    <description>End package load [Microsoft.VisualStudio.TestTools.TestCaseManagement.QualityToolsPackage, Microsoft.VisualStudio.QualityTools.TestCaseManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]</description>
    <guid>{A9405AE6-9AC6-4F0E-A03F-7AFE45F6FCB7}</guid>
  </entry>

任何帮助都将不胜感激。


我向微软提交了错误报告 - https://developercommunity.visualstudio.com/content/problem/676360/cannot-open-coverage-file-from-visual-studio-2019.html 目前的状态是,这是一个漏洞,在之前对于非企业SKU工作了那么多年。但让我们等待他们的最终回复。 - Miq
2个回答

34

微软回应

根据微软在漏洞报告上的回应 (https://developercommunity.visualstudio.com/content/problem/676360/cannot-open-coverage-file-from-visual-studio-2019.html),打开覆盖率文件是企业版特有的功能。

它之前(和现在)能够在2017社区版、专业版和2019 <16.2版本中使用,是因为一个错误,在运行所有测试后,缺失的程序集被加载,从而可以打开覆盖率。

TL;DR:

要想在专业版(或者可能也适用于社区版,没有测试过)中恢复打开覆盖率文件的功能,我们需要在<probing privatePath=""/>列表的末尾添加;Extensions\TestPlatform,并将其加入%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\16.0_一些哈希值\devenv.exe.config文件中。

或...

复制

Common7/IDE/Extensions/TestPlatform/Microsoft.VisualStudio.Coverage.Analysis.dll
Common7/IDE/Extensions/TestPlatform/Microsoft.VisualStudio.Coverage.Interop.dll

为了

Common7/IDE/PrivateAssemblies

背景

根据错误提示,打开覆盖率文件需要 DLL 文件。该文件在企业版中位于以下位置并从此处加载:Common7/IDE/PrivateAssemblies/Microsoft.VisualStudio.Coverage.Analysis.dll

然而,相同的文件也在Common7\IDE\Extensions\TestPlatform中。因此,我们已经拥有了所需的程序集文件,但devenv不知道它在那里。

%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\ 中有像16.0_hash这样的子文件夹,其中包含指定所需程序集及其位置的 devenv.exe.config 文件。
每个文件中还有一个<probing>条目,指定其他位置以告诉 devenv.exe 在哪里查找 dll 程序集。企业版和专业版具有相同的条目,但由于企业版缺少位于此列表中的PrivateAssemblies文件夹中的文件,因此devenv正在加载它。 因此,我们需要将 TestExtensions 中的 DLL 文件复制到 PrivateAssemblies 中,或将文件夹路径添加到探测列表中。


1
这个可以用,但需要在每次 VS 更新后重新做一遍。q-: - Manolis
1
我可以确认它也适用于社区版,非常感谢 :) - Xelit3
在我的情况下,将文件从16.4.5更新到16.5.4后仍然存活。 - Jonas Marty
我有VS 2019社区版,遇到了同样的问题,通过这个技巧解决了我的问题。谢谢@Miq。 - Javad Norouzi
3
FYI:我已经成功地在Visual Studio 2019 Professional中使用了这个技巧。然而,在v16.9.x版本中,这似乎不再起作用。值得注意的是,TestPlatform文件夹不再包含*.Analysis.dll*.Interop.dll程序集;相反,现在它有一个*.CoreLib.Net.dll——以及子文件夹中的*Monitor.dll*Interprocess.dll——没有一个满足代码覆盖插件的要求。 - Jeremy Caney
4
我最终通过安装 Visual Studio Enterprise v16.9.x(试用版),将其“PrivateAssemblies”目录中的库复制到 Visual Studio Professional 的目录下,然后卸载 Visual Studio Enterprise 来解决这个新限制。虽然这不是一个完美的解决方案,而且会引入一些许可证不确定性,但如果像我一样由于这些库突然被移除而陷入困境,那么至少这是一个技术上可行的选项。 - Jeremy Caney

1

当我遇到这个错误时:在VS2019上通过测试资源管理器运行集成测试。

我的问题是什么:发布配置

我如何解决:在调试模式下运行测试,然后它们再次变为绿色。

也许有人像我一样搜索了类似的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接