Добавление System.Web.Ui.WebControls в тестовый проект анализатора - PullRequest
0 голосов
/ 24 мая 2019

TL: DR - Как добавить System.Web.Ui.WebControls в мой AdhocWorkspace?

Длинная версия ...

Мой модульный тест для анализатора не пройден, поскольку среда компиляции теста не имеет ссылки на System.Web.Ui.WebControls. Мне нужно получить семантический тип, и это не удается, потому что он не знает, что это за тип.

Мой тестовый проект - core2.0:

 <PropertyGroup>
  <TargetFramework>netcoreapp2.0</TargetFramework>
 </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis" Version="3.0.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="2.9.2" />
    <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.0.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.0.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.0.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="3.0.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces" Version="3.0.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="3.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" />
    <PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
    <PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
    <PackageReference Include="System.Data.Common" Version="4.3.0" />
  </ItemGroup>

Мой DiagnosticVerifier имеет:

    private static readonly MetadataReference CorlibReference = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
    private static readonly MetadataReference SystemCoreReference = MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location);
    private static readonly MetadataReference CSharpSymbolsReference = MetadataReference.CreateFromFile(typeof(CSharpCompilation).Assembly.Location);
    private static readonly MetadataReference VBLangSymbolsReference = MetadataReference.CreateFromFile(typeof(VisualBasicCompilation).Assembly.Location);
    private static readonly MetadataReference CodeAnalysisReference = MetadataReference.CreateFromFile(typeof(Compilation).Assembly.Location);
    private static readonly MetadataReference SystemData = MetadataReference.CreateFromFile(typeof(System.Data.DataRow).Assembly.Location);
    private static readonly MetadataReference SystemWeb = MetadataReference.CreateFromFile(typeof(System.Web.HttpUtility).Assembly.Location);

И добавляет их в рабочее пространство с помощью:

        var solution = new AdhocWorkspace()
            .CurrentSolution
            .AddProject(projectId, TestProjectName, TestProjectName, language)
            .AddMetadataReference(projectId, CorlibReference)
            .AddMetadataReference(projectId, SystemCoreReference)
            .AddMetadataReference(projectId, CSharpSymbolsReference)
            .AddMetadataReference(projectId, VBLangSymbolsReference)
            .AddMetadataReference(projectId, CodeAnalysisReference)
            .AddMetadataReference(projectId, SystemData)
            .AddMetadataReference(projectId, SystemWeb)

Но я все еще получаю Тип 'Метка' не определена из context.Compilation.GetDiagnostics (), которая мешает мне определить, какой тип метки. Текст.

...