В моем пакете 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?
Или я поступаю совершенно неправильно?