В настоящее время я создаю инструмент, который будет поддерживать разработку основного проекта ASP. NET. Этот инструмент использует API-интерфейсы Roslyn и другие методы для проверки некоторых требований разработки (таких как атрибуты проекта c, применяемые к контроллерам API, соблюдение соглашений об именах и генерация некоторого исходного кода для JavaScript SPA, который обращается к написанному API используя шаблон ASP. NET Core Web API).
Для этого в настоящее время я использую жестко закодированные пути для генерации кода для приложения SPA. Но в файле *. Csproj приложения есть свойство «Spa Root», указывающее, где приложение SPA находится внутри проекта:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
<TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
<IsPackable>false</IsPackable>
<SpaRoot>ClientApp\</SpaRoot>
...
</PropertyGroup>
...
</Project>
Мой вопрос это: как я могу прочитать значение свойства "Spa Root" с помощью API Roslyn?
Я написал минимальный пример кода для создания Workspace
, откройте Solution
и получить ссылку Project
, которая выглядит следующим образом:
static async Task Main(string[] args)
{
string solutionFile = @"C:\Test\my-solution.sln";
using (var workspace = MSBuildWorkspace.Create())
{
var solution = await workspace.OpenSolutionAsync(solutionFile);
string projectName = "some-project";
var project = solution.Projects.Single(p => p.Name == projectName);
// How to extract the value of "SpaRoot" from the Project here?
}
Я пытался найти способ извлечения свойства "Spa Root" из ссылки Project
и даже пошел что касается отладки, чтобы увидеть, смогу ли я найти способ сам. К сожалению, я не получил ответов на этот вопрос, и я все еще использую жестко закодированные пути в моем исходном коде.
Возможно ли даже получить значение .csproj свойств объекта Project
используя текущие API Roslyn?