提交 141fe074 编写于 作者: M Matt Warren

Merge pull request #2343 from mattwar/Bug762

Be tolerant of msbuild failures 
......@@ -846,7 +846,16 @@ private class ResolvedReferences
private async Task<MetadataReference> GetProjectMetadata(string projectFilePath, ImmutableArray<string> aliases, IDictionary<string, string> globalProperties, CancellationToken cancellationToken)
{
// use loader service to determine output file for project if possible
var outputFilePath = await ProjectFileLoader.GetOutputFilePathAsync(projectFilePath, globalProperties, cancellationToken).ConfigureAwait(false);
string outputFilePath = null;
try
{
outputFilePath = await ProjectFileLoader.GetOutputFilePathAsync(projectFilePath, globalProperties, cancellationToken).ConfigureAwait(false);
}
catch (Exception e)
{
this.OnWorkspaceFailed(new WorkspaceDiagnostic(WorkspaceDiagnosticKind.Failure, e.Message));
}
if (outputFilePath != null && File.Exists(outputFilePath))
{
......
......@@ -993,6 +993,33 @@ public void TestOpenProject_WithUnrecognizedProjectReferenceFileExtension_WithMe
Assert.Equal(true, metaRefs.Any(r => r is PortableExecutableReference && ((PortableExecutableReference)r).Display.Contains("CSharpProject.dll")));
}
[Fact, Trait(Traits.Feature, Traits.Features.Workspace)]
public void TestOpenProject_WithUnrecognizedProjectReferenceFileExtension_BadMsbuildProject_SkipTrue_SucceedsWithDanglingProjectReference()
{
CreateFiles(GetMultiProjectSolutionFiles()
.WithFile(@"VisualBasicProject\VisualBasicProject.vbproj", GetResourceText(@"VisualBasicProject_VisualBasicProject_UnknownProjectExtension.vbproj"))
.WithFile(@"CSharpProject\CSharpProject.noproj", GetResourceBytes("CSharpProject.dll"))); // use metadata file as stand-in for bad project file
// keep metadata reference from holding files open
Workspace.TestHookStandaloneProjectsDoNotHoldReferences = true;
var ws = MSBuildWorkspace.Create();
var diags = new List<WorkspaceDiagnostic>();
ws.WorkspaceFailed += (s, args) =>
{
diags.Add(args.Diagnostic);
};
ws.SkipUnrecognizedProjects = true;
var project = ws.OpenProjectAsync(GetSolutionFileName(@"VisualBasicProject\VisualBasicProject.vbproj")).Result;
Assert.Equal(1, project.Solution.ProjectIds.Count);
Assert.Equal(0, project.ProjectReferences.Count());
Assert.Equal(1, project.AllProjectReferences.Count());
Assert.Equal(2, diags.Count);
}
[Fact(Skip = "https://roslyn.codeplex.com/workitem/451"), Trait(Traits.Feature, Traits.Features.Workspace)]
public void TestOpenProject_WithReferencedProject_LoadMetadata_ExistingMetadata_Succeeds()
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册