提交 5dc90e31 编写于 作者: J Jason Malinowski 提交者: GitHub

Merge pull request #20209 from vedun-z/fix-issue-20187

Update CreateProjectInfo to accept relative analyzer paths
......@@ -36,8 +36,10 @@ public static ProjectInfo CreateProjectInfo(string projectName, string language,
var metadataService = tmpWorkspace.Services.GetRequiredService<IMetadataService>();
// we only support file paths in /r command line arguments
var relativePathResolver =
new RelativePathResolver(commandLineArguments.ReferencePaths, commandLineArguments.BaseDirectory);
var commandLineMetadataReferenceResolver = new WorkspaceMetadataFileReferenceResolver(
metadataService, new RelativePathResolver(commandLineArguments.ReferencePaths, commandLineArguments.BaseDirectory));
metadataService, relativePathResolver);
var analyzerLoader = tmpWorkspace.Services.GetRequiredService<IAnalyzerService>().GetLoader();
var xmlFileResolver = new XmlFileResolver(commandLineArguments.BaseDirectory);
......@@ -54,7 +56,7 @@ public static ProjectInfo CreateProjectInfo(string projectName, string language,
// resolve all analyzer references.
foreach (var path in commandLineArguments.AnalyzerReferences.Select(r => r.FilePath))
{
analyzerLoader.AddDependencyLocation(path);
analyzerLoader.AddDependencyLocation(relativePathResolver.ResolvePath(path, baseFilePath: null));
}
var boundAnalyzerReferences = commandLineArguments.ResolveAnalyzerReferences(analyzerLoader);
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using System.Linq;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.Host.Mef;
......@@ -110,5 +111,20 @@ public void TestAdditionalFiles()
Assert.Equal("foo.cs", firstDoc.Name);
Assert.Equal("bar.cs", secondDoc.Name);
}
[Fact]
public void TestAnalyzerReferences()
{
var pathToAssembly = typeof(object).Assembly.Location;
var assemblyBaseDir = Path.GetDirectoryName(pathToAssembly);
var relativePath = Path.Combine(".", Path.GetFileName(pathToAssembly));
string commandLine = @"foo.cs /a:" + relativePath;
var info = CommandLineProject.CreateProjectInfo("TestProject", LanguageNames.CSharp, commandLine, assemblyBaseDir);
var firstDoc = info.Documents.Single();
var analyzerRef = info.AnalyzerReferences.First();
Assert.Equal("foo.cs", firstDoc.Name);
Assert.Equal(pathToAssembly, analyzerRef.FullPath);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册