2009-03-30 13 views
3

VSSをTFSに使用することから私の店を変換しようとしています。MSBuildの障害のトラブルシューティング

私たちの現在のコードベースは多数のVisual Studio 2008ソリューションで構成されていますが、その中にはMSBuildが失敗するように見えるものもありますが、その理由を理解できません。実際のソリューション自体とそれらが保持するプロジェクトは正しく構築されますが、全体的なビルドはまだ失敗します。

ErrorsAndWarnings.txtとRELEASE.TXTファイルはただの警告(私たちはクリーンアップする必要があるコード内のさまざまなささい)

BuildLog.txtファイルは、当然のことながら、膨大であり、トンを持って、エラーを表示しませんその中には理解しにくいテキストがたくさんあります。私が知ることができるように、SLBファイルに問題が発生すると、MSBuildはただちにクラッシュして消滅します。私は、スタックオーバーフローで、信じられないほど詳細なエラーメッセージを貼り付ける知っ

 
Task "MSBuild" 
    Global Properties: 
    Configuration=Release 
    Platform=Any CPU 
    OutDir=C:\TFS\REPOSITORY\Full\Binaries\Release\ 
    PublishDir=C:\TFS\REPOSITORY\Full\Binaries\Release\ 
    SkipInvalidConfigurations=true 
    RunCodeAnalysis=false 
    VCBuildOverride=C:\TFS\REPOSITORY\Full\Sources\Code\Solution\Solution.sln.Release.vsprops 
    VCBuildAdditionalLibPaths= 
    VCBuildAdditionalOptions= 
    VCBuildToolPath= 
    VCBuildUseEnvironment= 
    TeamBuildConstants=_TEAM_BUILD_ 
    TargetsNotLogged=GetTargetPath;GetNativeManifest;GetCopyToOutputDirectoryItems 

C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets(1008,5): 
error MSB4018: The "MSBuild" task failed unexpectedly. 
error MSB4018: System.NullReferenceException: Object reference not set to an instance of an object. 
error MSB4018: at Microsoft.Build.BuildEngine.SolutionWrapperProject.AssignDependencyLevel(ProjectInSolution project, SolutionParser solution, Dictionary`2 projectsByDependencyLevel) 
error MSB4018: at Microsoft.Build.BuildEngine.SolutionWrapperProject.AssignDependencyLevel(ProjectInSolution project, SolutionParser solution, Dictionary`2 projectsByDependencyLevel) 
error MSB4018: at Microsoft.Build.BuildEngine.SolutionWrapperProject.AssignDependencyLevels(SolutionParser solution, Dictionary`2 projectsByDependencyLevel) 
error MSB4018: at Microsoft.Build.BuildEngine.SolutionWrapperProject.CreateSolutionProject(SolutionParser solution, Project msbuildProject, BuildEventContext projectBuildEventContext, String wrapperProjectToolsVersion, Engine parentEngine, String solutionProjectCache) 
error MSB4018: at Microsoft.Build.BuildEngine.SolutionWrapperProject.Generate(SolutionParser solution, Project msbuildProject, String toolsVersionOverride, BuildEventContext projectBuildEventContext) 
error MSB4018: at Microsoft.Build.BuildEngine.Project.Load(String projectFileName, BuildEventContext buildEventContext, ProjectLoadSettings projectLoadSettings) 
error MSB4018: at Microsoft.Build.BuildEngine.Engine.GetMatchingProject(Project existingProject, String projectFullPath, BuildPropertyGroup globalPropertiesToUse, String toolsVersion, String[] targetNames, BuildEventContext buildEventContext, Boolean toolsVersionPeekedFromProjectFile) 
error MSB4018: at Microsoft.Build.BuildEngine.Engine.BuildProjectFileInternal(BuildRequest buildRequest) 
error MSB4018: at Microsoft.Build.BuildEngine.Engine.EngineBuildLoop(BuildRequest terminatingBuildRequest) 
error MSB4018: at Microsoft.Build.BuildEngine.TaskExecutionModule.BuildProjectFile(Int32 handleId, String[] projectFileNames, String[] targetNames, IDictionary[] globalPropertiesPerProject, IDictionary[] targetOutputsPerProject, EngineLoggingServices loggingServices, String[] toolsVersions, Boolean useResultsCache, Boolean unloadProjectsOnCompletion, BuildEventContext taskContext) 
error MSB4018: at Microsoft.Build.BuildEngine.EngineProxy.BuildProjectFilesInParallel(String[] projectFileNames, String[] targetNames, IDictionary[] globalProperties, IDictionary[] targetOutputsPerProject, String[] toolsVersions, Boolean useResultsCache, Boolean unloadProjectsOnCompletion) 
error MSB4018: at Microsoft.Build.Tasks.MSBuild.ExecuteTargets(ITaskItem[] projects, Hashtable propertiesTable, ArrayList targetLists, Boolean stopOnFirstFailure, Boolean rebaseOutputs, IBuildEngine2 buildEngine, TaskLoggingHelper log, ArrayList targetOutputs, Boolean useResultsCache, Boolean unloadProjectsOnCompletion, String toolsVersion) 
error MSB4018: at Microsoft.Build.Tasks.MSBuild.BuildProjectsInParallel(Hashtable propertiesTable, ArrayList targetLists, Boolean success, Boolean[] skipProjects) 
error MSB4018: at Microsoft.Build.Tasks.MSBuild.Execute() 
error MSB4018: at Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engineProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean& taskResult) 
Done building target "CoreCompileSolution" in project "TFSBuild.proj" -- FAILED. 
Done Building Project "C:\TFS\REPOSITORY\Full\BuildType\TFSBuild.proj" (CompileSolution target(s)) -- FAILED. 
Done executing task "MSBuild" -- FAILED. 
Done building target "CoreCompileConfiguration" in project "TFSBuild.proj" -- FAILED. 
Done Building Project "C:\TFS\REPOSITORY\Full\BuildType\TFSBuild.proj" (CompileConfiguration target(s)) -- FAILED. 
Done executing task "MSBuild" -- FAILED. 
Done building target "CoreCompile" in project "TFSBuild.proj" -- FAILED. 
Done Building Project "C:\TFS\REPOSITORY\Full\BuildType\TFSBuild.proj" (CoreCompile target(s)) -- FAILED. 
Done executing task "MSBuild" -- FAILED. 
Done building target "CallCompile" in project "TFSBuild.proj" -- FAILED. 

はラメですが、上から取るためにコアのものは、MSBuildのはをクラッシュされ、私はその理由を理解することはできませんです。これは、通常の "オブジェクト参照が設定されていません..."というエラーを出します。これは、トラブルシューティングしているコードやプログラムでない場合には、まったく普遍的ではありません。

TeamFoundation.Build.targetsを参照しています。私はそのファイルをファイルを参照するが、それは本当に問題が何であるかを私に飛び出さない。他の私は、これはノードに置換する必要がある項目のいずれかが欠けていたことを私に言っていたと思っまず

<!-- Build using MSBuild task --> 
<MSBuild BuildInParallel="$(BuildSolutionsInParallel)" 
     Projects="$(Solution)" 
     Properties="Configuration=$(Configuration);Platform=$(Platform);$(OutDirOption);$(PublishDirOption);SkipInvalidConfigurations=$(SkipInvalidConfigurations);$(FxCopDirOption);$(ReferencePathOption);$(CodeAnalysisOption); 
         VCBuildOverride=$(VsPropsFile);VCBuildAdditionalLibPaths=$(VCBuildAdditionalLibPaths);VCBuildAdditionalOptions=$(VCBuildAdditionalOptions);VCBuildToolPath=$(VCBuildToolPath);VCBuildUseEnvironment=$(VCBuildUseEnvironment); 
         TeamBuildConstants=$(TeamBuildConstants);TargetsNotLogged=$(TargetsNotLogged);$(CustomPropertiesForBuild);$(CustomProperties)" 
     Targets="$(Targets)" 
     StopOnFirstFailure="$(StopOnFirstFailure)"> 
    <Output TaskParameter="TargetOutputs" ItemName="CompilationOutputs" /> 
</MSBuild> 

(コメントの後の行は、上記参照)(1008,5ある)が、問題のないソリューションには、同様の設定があります。

ターゲットとのMSBuild契約のコールスタックの項目のいくつかに気付きました。この問題はTeamFoundation.Build.targetsファイルから発生しているようですが、トラブルシューティングのために次に行うべきことについては固まっています。

誰もこれまでに遭遇したことはありますか?

答えて

1

あなたが言った:

を実際のソリューション自身、彼らが正しく

を構築保持するプロジェクトは、あなたが、彼らはIDE内で正しく構築、またはあなたがそれらの解決策に行くことができるということを意味していますディレクトリをコマンドラインで実行し、 'msbuild foo.proj'または 'msbuild bar.sln'を実行しますか?

とにかく私がしようとしているのは、TFSに並列にビルドしないように言って、問題の解決策/プロジェクトを絞り込んで、マルチCPUサポートをオフにします(例えば '-maxcpucount:1')。離れてソリューション/プロジェクトをトリミング。問題のあるセットになったら、 '-v:diag'パラメータでビルドして、MSBuildエンジンの状態に関するさらに詳しい情報を取得します。

代わりに、MSBuildエンジンを直接起動し、最初のチャンスの例外をキャッチし、リフレクタを使用することでそのアプリケーションをデバッグする小さなC#アプリケーションを作成できます。 サンプルコードMSBuild Engine Classを参照してください。

+0

私はあなたの提案を実装しようとしています。どのように私はTFSに並行してビルドしないように指示しますか? – spilliton

+0

um、BuildSolutionsInParallelプロパティをfalseに設定します。 – Ants

4

私はソリューションファイルが破損していると思うし、VSはより耐性があります。(私が正しく覚えていれば、この衝突は比例しない中括弧によって引き起こされる可能性があります)

可能であれば、私はVS内からソリューションファイルを作り直します。 ダン(msbuildチーム)

+0

補足として、私は数時間にわたって*まったく同じ*問題の解決策を探していました。ソリューションファイルの再構築が終わったので、すべてがうまくいきました。ソリューションファイルを比較すると、いくつかのプロジェクトGUIDが誤って一致していました。 。 。 –

0

Hmmm。 NullReferenceExceptionが発生します。つまり、そのタスクに含まれるパラメータの1つが、そうでない場合にnullになることを意味します。あなたはビルドしたいソリューションを使ってTFSBuild.projファイルをセットアップしましたか? IE。あなたが入れたものは - Itemgroupです。ちょうど上記のごbuildlogにいくつかの診断情報を吐き出す必要があり

あなたは、私がTeambuildターゲットにメッセージタスクを追加することをお勧めしている場合は、そのような診断情報を書き出すだけ失敗したタスク上記のファイルログはあなたの次のビルドに貼り付けられます。

0

MSBuild-Sidekicksを試してみてください。彼らは含まれてMSBuildのための洗練された小さなデバッガを持っており、14日間の試用版を提供しています:http://www.attrice.info/msbuild/