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

Miq*_*Miq 12 c# code-coverage xunit visual-studio .net-core

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

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.
Run Code Online (Sandbox Code Playgroud)

我知道这通常意味着(对于以前的 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然后我使用 File -> Open 将其加载到 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>
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

Miq*_*Miq 33

微软回应

根据微软对错误报告的回应(https://developercommunity.visualstudio.com/content/problem/676360/cannot-open-coverage-file-from-visual-studio-2019.html)结果证明,打开 Coverage 文件仅是企业版的功能。

它之所以(并且正在)在 2017 社区和专业版和 2019 <16.2 上工作的原因是一个小故障,在运行所有测试后,缺少的程序集已加载并可以打开覆盖范围。

特尔;博士:

为了恢复在 Professional 上的开放覆盖文件(可能还有 Community,没有测试它),我们需要在somehash文件;Extensions\TestPlatform<probing privatePath=""/>列表末尾添加。%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
Run Code Online (Sandbox Code Playgroud)

Common7/IDE/PrivateAssemblies
Run Code Online (Sandbox Code Playgroud)

背景

要打开覆盖文件,作为错误状态,需要 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 程序集。Enterprise 和 Professional 具有相同的条目,但由于 Enterprise 版本PrivateAssemblies在此列表中的文件夹中缺少文件,devenv 正在加载它。因此,我们需要将 dll 文件从 TestExtensions 复制到 PrivateAssemblies 或将文件夹路径添加到探测列表。

  • 我最终通过安装 Visual Studio Enterprise v16.9.x(试用版)、将库从其“PrivateAssemblies”目录复制到 Visual Studio Professional 的目录,然后卸载 Visual Studio Enterprise 来解决此新限制。我不喜欢这个解决方案,它引入了一些许可歧义,但如果您像我一样,发现自己由于突然删除这些库而陷入困境,那么它至少是一个技术上可行的选择。 (4认同)
  • 仅供参考:我已经在 Visual Studio 2019 Professional 中成功使用了此技巧。然而,从 v16.9.x 开始,这似乎不再起作用。值得注意的是,“TestPlatform”文件夹不再包含“*.Analysis.dll”或“*.Interop.dll”程序集;相反,它现在在子文件夹中拥有一个“*.CoreLib.Net.dll”,以及“*Monitor.dll”和“*Interprocess.dll”,但它们都不满足代码覆盖率插件的要求。 (3认同)