提交 1240e832 编写于 作者: M manishv

Fix for bug 918072: Add support for MSBuildWorkspace to load analyzers from projects.

Add msbuild workspace support to load analyzer assemblies specified in the project file. This change is conditioned around presence of correct msbuild version referenced by workspaces projects. (changeset 1275262)
上级 2e0cedda
......@@ -42,6 +42,9 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<DefineConstants>TRACE;MEF</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildAssemblyNameFragment)' == 'v12.0'">
<DefineConstants>MSBUILD12</DefineConstants>
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.CSharp.EditorFeatures" />
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.CSharp.Features" />
......
......@@ -255,7 +255,12 @@ private void InitializeFromModel(CSharpCompilerInputs compilerInputs, MSB.Execut
compilerInputs.EndInitialization(out errorMessage, out errorCode);
}
private class CSharpCompilerInputs : MSB.Tasks.Hosting.ICscHostObject4
private class CSharpCompilerInputs :
#if !MSBUILD12
MSB.Tasks.Hosting.ICscHostObject4, MSB.Tasks.Hosting.IAnalyzerHostObject
#else
MSB.Tasks.Hosting.ICscHostObject4
#endif
{
private readonly CSharpProjectFile projectFile;
......
......@@ -197,6 +197,7 @@ private FileSet GetAnalyzerReferenceSolutionFiles()
return new FileSet(new Dictionary<string, object>
{
{ @"AnalyzerReference.sln", GetResourceText("TestSolution_AnalyzerReference.sln") },
{ @"AnalyzerSolution\CSharpProject.dll", GetResourceText("CSharpProject.dll") },
{ @"AnalyzerSolution\CSharpProject_AnalyzerReference.csproj", GetResourceText("CSharpProject_CSharpProject_AnalyzerReference.csproj") },
{ @"AnalyzerSolution\CSharpClass.cs", GetResourceText("CSharpProject_CSharpClass.cs") },
{ @"AnalyzerSolution\VisualBasicProject_AnalyzerReference.vbproj", GetResourceText("VisualBasicProject_VisualBasicProject_AnalyzerReference.vbproj") },
......
......@@ -8,7 +8,7 @@
using System.Threading;
using System.Xml.Linq;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.CodeAnalysis.Text;
......@@ -1545,9 +1545,10 @@ public void TestProjectReferenceLoadStandalone()
}
[WorkItem(918072, "DevDiv")]
[Fact(Skip = "918072"), Trait(Traits.Feature, Traits.Features.Workspace)]
[Fact, Trait(Traits.Feature, Traits.Features.Workspace)]
public void TestAnalyzerReferenceLoadStandalone()
{
#if !MSBUILD12
var projPaths = new[] { @"AnalyzerSolution\CSharpProject_AnalyzerReference.csproj", @"AnalyzerSolution\VisualBasicProject_AnalyzerReference.vbproj" };
var files = GetAnalyzerReferenceSolutionFiles();
......@@ -1560,11 +1561,15 @@ public void TestAnalyzerReferenceLoadStandalone()
var projectFullPath = Path.Combine(this.solutionDirectory.Path, projectPath);
var proj = ws.OpenProjectAsync(projectFullPath).Result;
Assert.Equal(1, proj.AnalyzerReferences.Count);
var analyzerReference = proj.AnalyzerReferences.First() as AnalyzerFileReference;
Assert.NotNull(analyzerReference);
Assert.True(analyzerReference.FullPath.EndsWith("CSharpProject.dll"));
}
// prove that project gets opened instead.
Assert.Equal(2, ws.CurrentSolution.Projects.Count());
}
#endif
}
[Fact, Trait(Traits.Feature, Traits.Features.Workspace), WorkItem(546171, "DevDiv")]
......
......@@ -17,6 +17,9 @@
<RestorePackages>true</RestorePackages>
<OutDir>..\..\..\Binaries\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildAssemblyNameFragment)' == 'v12.0'">
<DefineConstants>MSBUILD12</DefineConstants>
</PropertyGroup>
<ItemGroup Label="Project References">
<ProjectReference Include="..\..\Compilers\Core\Source\CodeAnalysis.csproj">
<Project>{1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}</Project>
......
......@@ -50,6 +50,9 @@
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildAssemblyNameFragment)' == 'v12.0'">
<DefineConstants>MSBUILD12</DefineConstants>
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.VisualBasic.EditorFeatures" />
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.VisualBasic.Features" />
......
......@@ -259,7 +259,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private Class VisualBasicCompilerInputs
Implements MSB.Tasks.Hosting.IVbcHostObject5, MSB.Tasks.Hosting.IVbcHostObjectFreeThreaded
#If Not MSBUILD12 Then
Implements MSB.Tasks.Hosting.IAnalyzerHostObject
#End If
Private _projectFile As VisualBasicProjectFile
Private _initialized As Boolean
Private _parseOptions As VisualBasicParseOptions
......@@ -579,7 +581,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return True
End Function
Public Function SetAnalyzers(analyzerReferences() As Microsoft.Build.Framework.ITaskItem) As Boolean
#If Not MSBUILD12 Then
Public Function SetAnalyzers(analyzerReferences() As MSB.Framework.ITaskItem) As Boolean Implements MSB.Tasks.Hosting.IAnalyzerHostObject.SetAnalyzers
#Else
Public Function SetAnalyzers(analyzerReferences() As MSB.Framework.ITaskItem) As Boolean
#End If
Me._analyzerReferences = If(analyzerReferences, SpecializedCollections.EmptyEnumerable(Of MSB.Framework.ITaskItem)())
Return True
End Function
......@@ -635,7 +641,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return False
End Function
#If Not MSBUILD12 Then
Public Function SetRuleSet(ruleSetFile As String) As Boolean Implements MSB.Tasks.Hosting.IAnalyzerHostObject.SetRuleSet
#Else
Public Function SetRuleSet(ruleSetFile As String) As Boolean
#End If
If Not String.IsNullOrEmpty(ruleSetFile) Then
Dim fullPath = FileUtilities.ResolveRelativePath(ruleSetFile, Path.GetDirectoryName(Me._projectFile.FilePath))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册