【发布时间】:2021-09-03 03:58:15
【问题描述】:
我正在创建一个 Visual Studio 扩展,在其中执行某些命令时,应该生成一个 .cs 文件,其中包含一个实现接口的类,并且所有成员也应该自动实现。
例子:
假设我有以下界面,
interface IFile
{
void ReadFile();
void WriteFile(string text);
}
我想生成以下代码:
using System;
namespace TestProject
{
public class FileInfo : IFile
{
public void ReadFile()
{
}
public void WriteFile(string text)
{
}
}
}
但我只能生成以下内容:
using System;
namespace TestProject
{
public class FileInfo : IFile
{
}
}
生成上述代码的代码如下:
AdhocWorkspace adhocWorkspace = new AdhocWorkspace();
var syntaxGenerator = SyntaxGenerator.GetGenerator(adhocWorkspace, LanguageNames.CSharp);
var usingSystem = syntaxGenerator.NamespaceImportDeclaration("System");
var interfaceNode = new List<SyntaxNode>() { SyntaxFactory.ParseTypeName("IFile") };
var classDeclaration = syntaxGenerator.ClassDeclaration("FileInfo",
null,
Accessibility.Public,
DeclarationModifiers.None,
null,
interfaceNode,
null
);
var namespaceDeclaration = syntaxGenerator.NamespaceDeclaration("TestProject", classDeclaration);
var generatedCode = syntaxGenerator.CompilationUnit(usingSystem, namespaceDeclaration)
.NormalizeWhitespace().ToFullString();
如何使用 CodeGenerator 实现所有成员? 或者是否有我可以使用的命令,例如格式化文档的命令,如下所示
dte.ExecuteCommand("Edit.FormatDocument", string.Empty);
【问题讨论】:
标签: c# visual-studio code-generation roslyn visual-studio-extensions