C# 在内存中创建的工作区-can';t访问符号信息

C# 在内存中创建的工作区-can';t访问符号信息,c#,roslyn,C#,Roslyn,为了单元测试的目的,我在内存中创建了一个工作区,但是我无法访问某个调用表达式的符号信息(这是我正在测试的代码问题所必需的)。下面是一个失败测试的简化示例。请帮忙 var solution = Solution.Create(SolutionId.CreateNewId()) .AddCSharpProject(Title, Title, out projectId) .AddM

为了单元测试的目的,我在内存中创建了一个工作区,但是我无法访问某个调用表达式的符号信息(这是我正在测试的代码问题所必需的)。下面是一个失败测试的简化示例。请帮忙

        var solution =
            Solution.Create(SolutionId.CreateNewId())
                    .AddCSharpProject(Title, Title, out projectId)
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("mscorlib"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("Microsoft.CSharp"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System.Core"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System.Web"))
                    .AddDocument(projectId, "MyFile.cs",
                        @"using System.Web;
                        public partial class _Default : Page
                        {
                            protected void Page_Load(object sender, EventArgs e, string s)
                            {
                                Response.Write(""hello"");
                            }
                        }"
                    , out documentId);



        var mydocument = solution.GetDocument(documentId);
        var tree = mydocument.GetSyntaxTree();
        var model = mydocument.GetSemanticModel();
        var responseWriteLine = tree.GetRoot().DescendantNodesAndSelf().First(x => x.GetLocation().GetLineSpan(false).StartLinePosition.Line == 5 && x is InvocationExpressionSyntax);

        Assert.IsNotNull(model.GetSymbolInfo(responseWriteLine.Expression).Symbol);

我在代码片段中添加了一些缺少的用法

 var solution =
            Solution.Create(SolutionId.CreateNewId())
                    .AddCSharpProject(Title, Title, out projectId)
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("mscorlib"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("Microsoft.CSharp"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System.Core"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System.Web"))
                    .AddDocument(projectId, "MyFile.cs",
                        @"using System;
                        using System.Web;
                        using System.Web.UI;

                        public partial class _Default : Page
                        {
                            protected void Page_Load(object sender, EventArgs e, string s)
                            {
                                Response.Write(""hello"");
                            }
                        }"
                    , out documentId);



            var mydocument = solution.GetDocument(documentId);
            var tree = mydocument.GetSyntaxTree();
            SemanticModel model = (SemanticModel)mydocument.GetSemanticModel();

            var responseWriteLine = tree.GetRoot().DescendantNodes().OfType<InvocationExpressionSyntax>().First();
            Assert.IsNotNull(model.GetSymbolInfo(responseWriteLine.Expression).Symbol);
var解决方案=
Solution.Create(SolutionId.CreateNewId())
.AddCSharpProject(标题、标题、外项目D)
.AddMetadataReference(projectId,MetadataReference.CreateSassemblyReference(“mscorlib”))
.AddMetadataReference(projectId、MetadataReference.CreateSassemblyReference(“Microsoft.CSharp”))
.AddMetadataReference(projectId,MetadataReference.CreateSassemblyReference(“系统”))
.AddMetadataReference(projectId、MetadataReference.CreateSassemblyReference(“System.Core”))
.AddMetadataReference(projectId、MetadataReference.CreateSassemblyReference(“System.Web”))
.AddDocument(projectId,“MyFile.cs”,
@“使用系统;
使用System.Web;
使用System.Web.UI;
公共部分类\u默认值:第页
{
受保护的无效页面加载(对象发送方、事件参数e、字符串s)
{
回答。写(“‘你好’”);
}
}"
,out documentId);
var mydocument=solution.GetDocument(documentId);
var tree=mydocument.GetSyntaxTree();
SemanticModel=(SemanticModel)mydocument.GetSemanticModel();
var responseWriteLine=tree.GetRoot().degenantNodes().OfType().First();
Assert.IsNotNull(model.GetSymbolInfo(responseWriteLine.Expression.Symbol);

我在代码片段中添加了一些缺少的用法

 var solution =
            Solution.Create(SolutionId.CreateNewId())
                    .AddCSharpProject(Title, Title, out projectId)
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("mscorlib"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("Microsoft.CSharp"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System.Core"))
                    .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System.Web"))
                    .AddDocument(projectId, "MyFile.cs",
                        @"using System;
                        using System.Web;
                        using System.Web.UI;

                        public partial class _Default : Page
                        {
                            protected void Page_Load(object sender, EventArgs e, string s)
                            {
                                Response.Write(""hello"");
                            }
                        }"
                    , out documentId);



            var mydocument = solution.GetDocument(documentId);
            var tree = mydocument.GetSyntaxTree();
            SemanticModel model = (SemanticModel)mydocument.GetSemanticModel();

            var responseWriteLine = tree.GetRoot().DescendantNodes().OfType<InvocationExpressionSyntax>().First();
            Assert.IsNotNull(model.GetSymbolInfo(responseWriteLine.Expression).Symbol);
var解决方案=
Solution.Create(SolutionId.CreateNewId())
.AddCSharpProject(标题、标题、外项目D)
.AddMetadataReference(projectId,MetadataReference.CreateSassemblyReference(“mscorlib”))
.AddMetadataReference(projectId、MetadataReference.CreateSassemblyReference(“Microsoft.CSharp”))
.AddMetadataReference(projectId,MetadataReference.CreateSassemblyReference(“系统”))
.AddMetadataReference(projectId、MetadataReference.CreateSassemblyReference(“System.Core”))
.AddMetadataReference(projectId、MetadataReference.CreateSassemblyReference(“System.Web”))
.AddDocument(projectId,“MyFile.cs”,
@“使用系统;
使用System.Web;
使用System.Web.UI;
公共部分类\u默认值:第页
{
受保护的无效页面加载(对象发送方、事件参数e、字符串s)
{
回答。写(“‘你好’”);
}
}"
,out documentId);
var mydocument=solution.GetDocument(documentId);
var tree=mydocument.GetSyntaxTree();
SemanticModel=(SemanticModel)mydocument.GetSemanticModel();
var responseWriteLine=tree.GetRoot().degenantNodes().OfType().First();
Assert.IsNotNull(model.GetSymbolInfo(responseWriteLine.Expression.Symbol);

您使用的是哪种ctp?您使用的是哪种ctp?感谢您清理我的可疑代码!它现在看起来正在工作。:)FWIW,我正在使用2012年9月的CTP。谢谢你清理我的密码!它现在看起来正在工作。:)FWIW,我正在使用2012年9月的CTP。