Sonar-msbuild-runner以255错误退出,错误CLR模块

时间:2015-07-16 09:57:36

标签: c# tfs msbuild sonarqube sonarqube-msbuild-runner

问题

所以,我们遇到了一个非常奇怪的问题。目前这是我们的情况。我们有两个构建服务器连接到两个TFS集合

  • Collection A有一个安装了Windows Server 2012 R2的构建服务器 在它上面
  • Collection B有一个带有Windows Server 2008 R2的构建服务器 安装在它上面。

两台服务器都安装了sonar-msbuild-runner。在集合A上一切正常,但在集合B上的构建服务器上执行分析时,我们会收到以下错误。

Faulting application name: SonarQube.MSBuild.PostProcessor.exe, version: .9.0.0, time stamp: 0x559d2baa
Faulting module name: clr.dll, version: 4.0.30319.34209, time stamp: 0x5348961e
Exception code: 0xc0000005
Fault offset: 0x00002d1f
Faulting process id: 0x11ec
Faulting application start time: 0x01d0bf9ffbb54cab
Faulting application path: D:\PathToSolutionFolderOnBuildServer\.sonarqube\bin\SonarQube.MSBuild.PostProcessor.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: 3cbfce4b-2b93-11e5-b84b-0050569a7ef0

我们在Github上检索了最新版本,并添加了额外的日志记录以找出导致错误的行。 This line is causing the problems

再生

我能够使用以下代码在运行Windows 7的本地开发计算机上重现此错误。在第一个Assert上设置调试点,然后将鼠标悬停在projectName属性上时,它会导致我的整个Visual Studio崩溃。

[TestMethod]
public void TestMethod1()
{
    using (TfsTeamProjectCollection collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs-url:8080/tfs/collectionname/")))
    {
        IBuildServer buildServer = collection.GetService<IBuildServer>();
        string uri = "vstfs:///Build/Build/4238";
        var buildUri = new Uri(uri);
        IBuildDetail build = buildServer.GetMinimalBuildDetails(buildUri);
        string projectName = build.TeamProject;

        ITestManagementService tcm = collection.GetService<ITestManagementService>();
        ITestManagementTeamProject testProject = tcm.GetTeamProject(projectName);

        Assert.IsNotNull(testProject);
        IBuildCoverage[] coverage = testProject.CoverageAnalysisManager.QueryBuildCoverage(uri, CoverageQueryFlags.Modules);
        Assert.IsTrue(coverage.Length > 0);

    }
}

导致以下错误消息:

Faulting application name: devenv.exe, version: 12.0.31101.0, time stamp: 0x54548724
Faulting module name: clr.dll, version: 4.0.30319.34209, time stamp: 0x5348961e
Exception code: 0xc0000005
Fault offset: 0x004c2b43
Faulting process id: 0x10e4
Faulting application start time: 0x01d0bf9ec962fde0
Faulting application path: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: 14f6496d-2b9b-11e5-a293-083e8ea0a055

可能的解决方案

错误直接导致KB article。我们无法应用此修复程序。

此外,我们删除了.NET framework 4,因为版本4.5.2已经安装,我们认为它可能会相互冲突。现在只有4.5.1和4.5.2仍然安装在构建服务器上,我们不确定解决方案是什么。作为最后一个选项,我们正在考虑将集合B上的构建服务器升级到Windows Server 2012 R2,以确定这是否可以作为解决方案。

编辑:已修复

由于内部错误,VS2013已卸载。所以我们不得不重新安装VS2013并更新4.我们还升级到1.0版。这似乎解决了这个问题。现在可以在我们的门户网站上找到代码覆盖率。

1 个答案:

答案 0 :(得分:3)

这看起来像.NET框架中的问题/错误,正如您也调查过的那样。如果您可以升级到Windows Server 2012 R2,那么这将是最好的方法。

sonar-msbuild-runner还有一个解决方法:您可以通过设置环境变量来禁用代码覆盖率检索:SQ_SkipLegacyCodeCoverage。但是,如果你这样做,SonarQube将无法获得代码覆盖率数据......