【发布时间】:2020-07-31 22:33:47
【问题描述】:
我目前正在构建一个支持 ASP.NET Core 项目开发的工具。该工具使用 Roslyn API 和其他方法来验证一些开发要求(例如应用于 API 控制器的项目特定属性、强制命名约定以及为访问使用 ASP.NET 编写的 API 的 JavaScript SPA 生成一些源代码核心 Web API 模板)。
为了做到这一点,我目前正在使用硬编码路径为 SPA 应用程序生成代码。但在应用程序的 *.csproj 文件中,实际上有一个“SpaRoot”属性指定 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>
我的问题是:如何使用 Roslyn API 读取“SpaRoot”属性的值?
我编写了一个最小代码示例来创建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?
}
我尝试搜索如何从Project 引用中提取“SpaRoot”属性,甚至还进行了调试以查看我自己是否能找到方法。不幸的是,我没有找到答案,而且我仍在原始代码中使用硬编码路径。
是否甚至可以使用当前的 Roslyn API 检索 Project 的 .csproj 属性的值?
【问题讨论】: