【问题标题】:Generate Code from a Visual Studio Extension从 Visual Studio 扩展生成代码
【发布时间】:2012-04-12 15:31:44
【问题描述】:

我有一个基于元数据生成文本(表示接口和类)的项目。我想把这个生成的代码作为一个新的类和接口直接插入到特定项目和目录下当前打开的解决方案中。我将创建将生成类的菜单工具,但我不知道如何从我的自定义 Visual Studio 扩展中访问以下项目:

  1. 迭代当前解决方案并找到一个项目将生成的代码转储到其中。
  2. 在 Visual Studio 中打开一个新文件窗口,并将我的工具生成的文本直接注入该窗口。
  3. 在我的自定义扩展中,在当前解决方案的特定项目中创建一个新文件夹。

编辑 - 为了澄清,我需要打开一个新文件(例如,右键单击项目 -> 添加 -> 新类)并从我的自定义 Visual Studio 扩展中将文本插入其中。

谢谢

【问题讨论】:

  • 您是否考虑过使用 T4 模板而不是扩展?您可以在 .config 文件中将元数据创建为 XML 并运行 T4 模板来生成每个类/接口。不过,它仅适用于 1-1 元生成的映射。
  • 是的,我现在实际上正在使用 T4 模板来生成代码,但是这些类是从数据库中的元数据生成的,所以我不希望它们存在于项目中,我希望能够让用户说出他们想要的类类型,然后我生成代码(使用 T4)并返回一个类和一个接口作为文本,这让我在上面的问题。
  • 将 T4 模板放在您将使用生成的代码的同一位置是有意义的。
  • @JohnMaloney 您可以让 T4 模板查询数据库。我们有一些调用存储过程来生成自定义实体和 DAL 代码。
  • @DaveShaw 这就是我目前正在做的事情,我将允许用户右键单击一个项目并打开一个 VS 工具窗口,允许他们选择要生成的类的类型,这将然后使用 T4 模板为该类和接口生成完整的源代码,这个过程是没有问题的,我需要知道如何在 Visual Studio 中打开一个新窗口来插入我生成的文本(例如右键单击一个项目 - > 添加 - > 新类)并从我的自定义 Visual Studio 扩展中将文本插入其中。

标签: c# visual-studio-2010 visual-studio-extensions office-addins


【解决方案1】:

要从 Visual Studio 扩展 (ToolWindowPane) 创建新文件,首先使用 GetService 方法:

// Get an instance of the currently running Visual Studio IDE
DTE dte = (DTE)GetService(typeof(DTE));

其次,确保当前打开了一个解决方案,如果没有打开解决方案,则文件生成将不起作用:

string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);

三、从DTE对象生成新文件:

dte.ItemOperations.NewFile(@"General\Visual C# Class", "ObjectOne", EnvDTE.Constants.vsViewKindTextView);

创建新文件后,使用以下代码访问该文件的文本并将其替换为您生成的文本:

TextSelection txtSel = (TextSelection)dte.ActiveDocument.Selection;
TextDocument txtDoc = (TextDocument)dte.ActiveDocument.Object("");

txtSel.SelectAll();
txtSel.Delete();
txtSel.Insert("Hello World");

【讨论】:

  • 如何在不提示保存对话框(静默保存)的情况下保存生成的文件并作为项目添加到解决方案中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多