【发布时间】:2020-04-21 00:55:03
【问题描述】:
我正在尝试使用 Roslyn 生成代码。我创建了一个这样的方法:
var workspace = new AdhocWorkspace();
var generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
var parameters = new SyntaxNode[] { generator.ParameterDeclaration("MyParam", generator.TypeExpression(SpecialType.System_Boolean))};
var body = ...
var method = generatpr.MethodDeclaration(
"MyMethod",
parameters,
null,
null,
Accessibility.Public,
DeclarationModifiers.Virtual,
new SyntaxNode[] { body});
我的问题是,如何创建其他类型的参数,如 Guid,或其他结构或类?我可以用与语言无关的方式来做吗?
【问题讨论】:
-
对我最有帮助的是 Compilation.GetTypeByMetadataName,但我需要一个 Compilation 对象的实例。我怎么得到它?
-
默认文字
-
@EvanTrimboli - 我也看到了,但它需要编译。因为我在生成代码,所以我有一个 SyntaxGenerator 实例,我有一个 Type 对象的实例,所以我使用了 SyntaxGenerator.IdentifierName() 函数,并传入了 Type 实例的 FullName 属性。
-
我知道它可能不适用于您的用例,但实际上以防万一,我想提一下,您可以使用静态类
Microsoft.CodeAnalysis.CSharp.SyntaxFactory而不是SyntaxGenerator- 它有更多方法并且不需要工作区即可运行。