Как распознать проект ASP.NET Core в расширении Visual Studio - PullRequest
0 голосов
/ 06 января 2019

В моем пакете Visual Studio я смотрю на каждый проект в решении и мне нужно определить, какой это проект.

Исторически я использую технику, подобную той, которая описана Карлосом Кинтеро здесь , чтобы получить GUID проекта и искать конкретные GUID в списке.

Для проектов ASP.NET Core я искал

AspNetCore:  "{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}"
AspNetCore2: "{9A19103F-16F7-4668-BE54-9A1E7A4F7556}"

Это, вероятно, все еще будет работать, если в проекте используется файл проекта старого стиля.

Однако он не работает, если используется новая система Visual Studio Project.

Это файл проекта, который я сейчас использую:

<Project Sdk="Microsoft.NET.Sdk.Web">

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

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <Compile Update="App_GlobalResources\Resources.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Update="App_GlobalResources\Resources.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Controllers\App_LocalResources\HomeController.resx.en.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Controllers\HomeController.en.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Controllers\HomeController.nl.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Controllers\HomeController.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Controllers\StudentController.en.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Models\Student.en.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Views\Home\About.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Views\Home\Contact.en.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Views\Home\Index.en.resx">
      <Generator></Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Resources\Views\Home\Index.resx">
      <Generator></Generator>
    </EmbeddedResource>
  </ItemGroup>

</Project>

Как видите, он не содержит GUID проекта.

Используя методику, описанную в Как определить, является ли проект проектом CPS , я могу определить, что это проект CPS (Common Project System).

Используя технику, описанную в Поиск CPS в проекте VS , я могу заполучить «ненастроенный проект», и я также могу получить «настроенный проект» (хотя я не конечно, я понимаю, что означает "ненастроенный" и "настроенный" в этом контексте).

В этот момент я застрял. Я не могу понять, как определить, является ли это проектом ASP.NET Core.

Лучше всего получить атрибут TargetFramework , который равен netcoreapp2.0 . Есть ли способ получить атрибут TargetFramework из объекта проекта CPS?

Или я поступаю совершенно неправильно?

1 Ответ

0 голосов
/ 06 января 2019

Вы можете найти TargetFrameworkMoniker:

    public static bool IsNetCore2(this Project project)
    {
        return project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.");
    }

https://github.com/ErikEJ/EFCorePowerTools/blob/master/src/GUI/EFCorePowerTools/Extensions/ProjectExtensions.cs#L75

Чтобы обнаружить ASP.NET Core, я думаю, вам придется проанализировать файл csproj: и найдите Sdk = "Microsoft.NET.Sdk.Web"

...