通过Roslyn API读取默认命名空间

时间:2013-02-28 09:42:44

标签: .net roslyn

有没有办法从IProject接口或任何其他Roslyn接口读取默认命名空间设置?我知道我可以解析项目的文件,但我认为这应该可以使用Roslyn API,但我找不到如何做到这一点。提前感谢您的信息。

2 个答案:

答案 0 :(得分:3)

不幸的是,Roslyn目前还没有提供一种方法,但我同意这是我们最终可能需要的。

答案 1 :(得分:1)

库Microsoft.Build.Evaluation,我相信,Roslyn的继承者确实有这个功能,但它并不容易找到。

我使用下面的代码获取默认命名空间。

我的测试显示它与存储在.csproj文件中的RootNamespace匹配。

        private string GetDefaultNamespace(Microsoft.Build.Evaluation.Project p)
    {
        string rtnVal = "UNKNOWN_NAMESPACE";

        foreach (ProjectItemDefinition def in p.ItemDefinitions.Values)
        {
            if (def.ItemType == "ProjectReference")
            {
                foreach(ProjectProperty prop in def.Project.AllEvaluatedProperties){
                    if(prop.Name == "RootNamespace"){
                        rtnVal = prop.EvaluatedValue;
                    }
                }
            }
        }

        return rtnVal;
    }