如何解决从现有的 csproj 获取默认命名空间Microsoft.NET.Sdk 格式
所以,我正在编写一个代码生成器工具,我想从用户必须指定的现有 csproj 中获取默认命名空间。本质上,我希望能够从路径加载 csproj 并从中获取一些配置。
我还希望能够从解决方案中获取所有现有项目,从中我将使用路径中的解决方案文件。
我研究了代码分析器并相信这是可行的方法,但到目前为止我还没有找到我想要实现的目标的一个示例。
我不希望支持旧格式的 csproj,只支持 VS2017 附带的 Microsoft.NET.Sdk 格式。
解决方法
因此,评论中所述的解决方案是使用 MSBuildWorkspace。
我的代码如下所示:
using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis;
public class ProjectLoader : IProjectLoader
{
public string GetVSProjectDefaultNamespace(string projectPath)
{
var workspace = MSBuildWorkspace.Create();
Project project;
try
{
project = workspace.OpenProjectAsync(projectPath).Result;
}
catch(Exception e)
{
throw new Exception("The requested project failed to load. Make sure the path to the project file is correct.",e);
}
var defaultNamespace = project.DefaultNamespace ?? project.Name;
return defaultNamespace;
}
}
安装以下 nuget 包很重要:
Microsoft.CodeAnalysis
Microsoft.CodeAnalysis.Workspaces.MSBuild
为了使上一个片段起作用。
希望这对其他人有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。