7

我有一個項目根據元數據生成文本(表示一個接口和一個類)。我想將這個生成的代碼作爲一個新的類和接口直接插入當前在特定項目和目錄下打開的解決方案。我將創建菜單工具,將生成的類,但我不知道怎麼做是我的自定義的Visual Studio擴展中的下列項目獲得進入:從Visual Studio擴展生成代碼

  1. 迭代當前的解決方案,並找到一個項目將生成的代碼轉儲到。
  2. 在Visual Studio中打開一個新的文件窗口,並將生成的文本直接從我的工具注入到該窗口中。
  3. 在我的自定義擴展中,在當前解決方案中的特定項目中創建一個新文件夾。

編輯 - 爲了澄清我需要打開一個新的文件(例如,右鍵單擊一個項目 - >添加 - >新建類),並從我的自定義的Visual Studio擴展中的文本插入到它。

感謝

+1

你有沒有考慮使用T4模板,而不是一個擴展的?您可以在.config文件中將元數據創建爲XML,然後運行T4模板以生成每個類/接口。它只適用於1-1元生成的映射。 – DaveShaw 2012-04-12 15:35:15

+0

是的我現在實際上使用T4模板來生成代碼,但是這些類是從數據庫中的元數據生成的,所以我不希望它們存在於項目中,我希望能夠讓用戶說出哪種類型他們想要,然後我生成代碼(使用T4),並返回一個類和一個接口作爲文本,這留下了我的問題上面。 – 2012-04-12 16:38:47

+0

將T4模板放在您要使用生成的代碼的相同位置是有意義的。 – StingyJack 2012-04-12 16:47:37

回答

10

要創建從一個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"); 
+0

如何在不提示保存對話框(無聲保存)的情況下保存生成的文件並將其作爲項添加到解決方案? – Gayan 2017-06-09 04:37:02

相關問題