微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从现有的 csproj 获取默认命名空间Microsoft.NET.Sdk 格式

如何解决从现有的 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 举报,一经查实,本站将立刻删除。