C# Roslyn:使用CSharp编译器选项的效果

C# Roslyn:使用CSharp编译器选项的效果,c#,.net,roslyn,C#,.net,Roslyn,我的问题是关于csharpcomilatoroptions和使用传递给csharpcomilation实例的语句 我从一些文本中解析了一个语法树: SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@" namespace RoslynCodeAnalysis { using System; using System.Net; //

我的问题是关于
csharpcomilatoroptions
使用传递给
csharpcomilation
实例的
语句

我从一些文本中解析了一个语法树:

SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@"
            namespace RoslynCodeAnalysis
            {
                using System;
                using System.Net; // Commenting this out causes errors

                public class Writer
                {
                    public void Write(string message)
                    {
                        WebClient client = new WebClient();
                        Console.WriteLine(message); 
                    }
                }
            }");
CSharpCompilation实例创建如下。为了简单起见,我没有包含这些引用,但它确实添加了对System.Net和其他几个常用程序集的引用

CSharpCompilation compilation = CSharpCompilation.Create(
            assemblyName,
            syntaxTrees: new[] { syntaxTree },
            references: references,
            options: new CSharpCompilationOptions(
                       OutputKind.DynamicallyLinkedLibrary, 
                       usings: new List<string> { "System", "System.Net" }));
csharpcomilation=csharpcomilation.Create(
汇编名,
syntaxTrees:new[]{syntaxTree},
参考文献:参考文献,
选项:新CSharpCompliationOptions(
OutputKind.DynamicallyLinkedLibrary,
用法:新列表{“System”,“System.Net”});
问题是,如果我使用System.Net进行注释,我会收到以下错误信息:

CS0246:找不到类型或命名空间名称“WebClient”(是 是否缺少using指令或程序集引用?)


这是什么原因造成的?传递给CSharpCompilation的选项将usings属性设置为System和System.Net。这是正常的行为还是我遗漏了什么?即使指定了usings属性,源文本仍然需要using语句?我很确定我错过了什么

这用于编写脚本,而不是普通的文件编译


如果您通过Roslyn源代码跟踪该属性的使用情况,最终将在交互管道中使用该属性(这就是
提交
的含义)。

我在这里猜测,但这些似乎是用于全局命名空间的。。。注意第27行中的全局命名空间用法。
。可以在
global::
名称空间别名下访问这些名称空间如果我没有记错,请将其切换到
global::WebClient client=new global::WebClient()
并将使用System.Net与
一起工作注释掉了。你好,威尔,谢谢你的建议,我试过了,还是一样的错误。我确实注意到源代码中的那个注释,并且我假设它对于当前编译单元的所有语法树都是“全局的”。@Will:No;“那不是真的!”斯拉克斯我说这是猜测,天哪。穆的感觉。