Ich versuche, mein Geschäft von VSS auf TFS umzustellen.
Unsere aktuelle Codebasis besteht aus einer großen Anzahl von Visual Studio 2008-Lösungen, und ich habe bemerkt, dass einige von ihnen MSBuild zum Scheitern zu bringen scheinen, aber ich kann nicht herausfinden, warum. Die eigentlichen Lösungen selbst und die Projekte, die sie enthalten, bauen richtig, aber der gesamte Build schlägt immer noch fehl.
Die Dateien ErrorsAndWarnings.txt und Release.txt enthalten keine Fehler, sondern nur Warnungen (verschiedene Kleinigkeiten im Code, die bereinigt werden müssen)
Die Datei BuildLog.txt ist natürlich riesig und enthält tonnenweise schwer zu verstehenden Text. Soweit ich das beurteilen kann, stürzt MSBuild einfach ab, wenn es zu einer dieser SLN-Dateien kommt, die ihm Probleme bereiten.
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.
Ich weiß, dass es lahm ist, unglaublich ausführliche Fehlermeldungen in Stack Overflow einzufügen, aber das Wichtigste, was man aus dem oben Gesagten mitnehmen kann, ist MSBuild stürzt ab und ich kann mir nicht erklären, warum. Es gibt die übliche "Object reference not set..."-Fehler, die so ziemlich allgemein nutzlos ist, wenn es nicht Ihr Code oder Programm Sie Fehlerbehebung sind.
Ich sehe, dass sie auf TeamFoundation.Build.targets verweist. Ich schaue in dieser Datei nach, aber es fällt mir nicht wirklich auf, was das Problem sein könnte. (die Zeile nach dem Kommentar ist die (1008,5), auf die oben verwiesen wurde)
<!-- 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>
Zuerst dachte ich, dass mir dies sagt, dass eines der Elemente, die im Knoten ersetzt werden müssen, fehlt, aber die anderen Lösungen, die keine Probleme haben, haben ähnliche/identische Setups.
Ich stelle fest, dass einige der Elemente im Aufrufstapel von MSBuild mit Zielen zu tun haben und das Problem aus der Datei TeamFoundation.Build.targets zu stammen scheint, aber ich weiß nicht, was ich als Nächstes tun soll, um das Problem zu beheben.
Ist das schon einmal vorgekommen?