Sonar-msbuild-runner 退出并出现 255 错误,故障 CLR 模块
Sonar-msbuild-runner exits with 255 error, Faulting CLR Module
问题
因此,我们 运行 陷入了一个非常棘手的 运行 问题。目前这是我们的情况。我们有两个构建服务器连接到两个 TFS 集合
- 集合 A 的构建服务器安装了 Windows Server 2012 R2
在上面
- 集合 B 有一个构建服务器 Windows Server 2008 R2
安装在上面。
两台服务器都安装了 sonar-msbuild-runner。在 Collection A 上一切正常,但在 Collection 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版本。这似乎解决了问题。代码覆盖率现已在我们的门户网站上可用。
这看起来像是 .NET Framework 中的问题/错误,您也进行了调查。如果您可以升级到 Windows Server 2012 R2,那么这将是前进的最佳方式。
sonar-msbuild-runner 也有一个解决方法:您可以通过设置环境变量来禁用代码覆盖率检索:SQ_SkipLegacyCodeCoverage。但是,如果您这样做,SonarQube 将不会获得代码覆盖率数据...
问题
因此,我们 运行 陷入了一个非常棘手的 运行 问题。目前这是我们的情况。我们有两个构建服务器连接到两个 TFS 集合
- 集合 A 的构建服务器安装了 Windows Server 2012 R2 在上面
- 集合 B 有一个构建服务器 Windows Server 2008 R2 安装在上面。
两台服务器都安装了 sonar-msbuild-runner。在 Collection A 上一切正常,但在 Collection 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版本。这似乎解决了问题。代码覆盖率现已在我们的门户网站上可用。
这看起来像是 .NET Framework 中的问题/错误,您也进行了调查。如果您可以升级到 Windows Server 2012 R2,那么这将是前进的最佳方式。
sonar-msbuild-runner 也有一个解决方法:您可以通过设置环境变量来禁用代码覆盖率检索:SQ_SkipLegacyCodeCoverage。但是,如果您这样做,SonarQube 将不会获得代码覆盖率数据...