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;“那不是真的!”斯拉克斯我说这是猜测,天哪。穆的感觉。