Roslyn:CSharpCompilerOptions WithUsings 的效果
Roslyn: Effect of CSharpCompilerOptions WithUsings
我的问题是关于 CSharpCompilerOptions
和 using
语句传递给 CSharpCompilation
的实例。
我有一个从一些文本中解析出来的语法树:
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" }));
问题是,如果我使用 System.Net 注释掉,我会收到错误消息:
CS0246: The type or namespace name 'WebClient' could not be found (are
you missing a using directive or an assembly reference?)
这可能是什么原因造成的?传递给 CSharpCompilation 的选项将 usings 属性 设置为 System 和 System.Net。这是正常行为还是我遗漏了什么?即使指定了 usings 属性 ,源文本仍然需要有 using 语句?我很确定我错过了什么!
这用于脚本,而不是普通的文件编译。
如果您通过 Roslyn 源跟踪 属性 的用法,您最终会得到 here,它在交互式管道中使用(这就是 Submission
的含义)。
我的问题是关于 CSharpCompilerOptions
和 using
语句传递给 CSharpCompilation
的实例。
我有一个从一些文本中解析出来的语法树:
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" }));
问题是,如果我使用 System.Net 注释掉,我会收到错误消息:
CS0246: The type or namespace name 'WebClient' could not be found (are you missing a using directive or an assembly reference?)
这可能是什么原因造成的?传递给 CSharpCompilation 的选项将 usings 属性 设置为 System 和 System.Net。这是正常行为还是我遗漏了什么?即使指定了 usings 属性 ,源文本仍然需要有 using 语句?我很确定我错过了什么!
这用于脚本,而不是普通的文件编译。
如果您通过 Roslyn 源跟踪 属性 的用法,您最终会得到 here,它在交互式管道中使用(这就是 Submission
的含义)。