4

問題

それで、私たちは非常に奇妙な問題に遭遇しました。現在、これが当社の状況です。2 つの TFS コレクションに接続された 2 つのビルド サーバーがあります。

  • コレクション A には、Windows Server 2012 R2 がインストールされたビルド サーバーがあります。
  • コレクション 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 で最新バージョンを取得し、ログを追加して、エラーの原因となった行を特定しました。この行が問題の原因です。

再生中

次のコードを使用して、Windows 7 を実行しているローカルの開発マシンでこのエラーを再現できました。最初のアサートでデバッグ ポイントを設定し、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 記事に直接つながります。この修正を適用できませんでした。

さらに、バージョン 4.5.2 が既にインストールされており、互いに競合する可能性があると考えたため、.NET Framework 4 を削除しました。現在、ビルド サーバーには 4.5.1 と 4.5.2 のみがインストールされており、解決策は不明です。最後のオプションとして、コレクション B のビルド サーバーを Windows Server 2012 R2 にアップグレードして、これが解決策になるかどうかを確認することを検討しています。

編集:修正

内部エラーにより、VS2013 がアンインストールされました。そのため、VS2013 を再インストールして 4 を更新する必要がありました。また、バージョン 1.0 にアップグレードしました。これで問題は解決したようです。コード カバレッジが Web ポータルで利用できるようになりました。

4

1 に答える 1

3

あなたも調査したように、これは.NETフレームワークの問題/バグのようです。Windows Server 2012 R2 にアップグレードできる場合は、これが最善の方法です。

sonar-msbuild-runner 側にも回避策があります。環境変数 SQ_SkipLegacyCodeCoverage を設定することで、コード カバレッジの取得を無効にすることができます。ただし、これを行うとSonarQubeはコードカバレッジデータを取得しません...

于 2015-07-16T16:35:46.910 に答える