我們有一個使用DTE環境編寫的Visual Studio嚮導來自動生成代碼,模板等。基於一些自定義數據庫的東西。現在它帶來幾個對話框,收集信息,然後使用EnvDTE類生成代碼並對其進行格式化。如何從命令行調用自定義Visual Studio嚮導?
鑑於我有從可用的對話框收集的信息,有沒有辦法調用devenv並讓它運行嚮導來自動生成代碼?
我們有一個使用DTE環境編寫的Visual Studio嚮導來自動生成代碼,模板等。基於一些自定義數據庫的東西。現在它帶來幾個對話框,收集信息,然後使用EnvDTE類生成代碼並對其進行格式化。如何從命令行調用自定義Visual Studio嚮導?
鑑於我有從可用的對話框收集的信息,有沒有辦法調用devenv並讓它運行嚮導來自動生成代碼?
對此的答案是使用DTE2接口的visual studio自動化。例如,我創建的Visual Studio的新實例
Type t = Type.GetTypeFromProgID("VisualStudio.DTE.9.0", true);
object obj = System.Activator.CreateInstance(t, true);
m_DTEInstance = obj as DTE2;
然後,你可以做的事情,如創建一個新的解決方案:
Solution2 solution = (Solution2)m_DTEInstance.Solution;
solution.Create(OutputDirectory, Namespace + ".sln");
您當然可以從命令行運行Visual Studio。你甚至可以讓它執行一個命令(devenv /Command ...
),但它仍然意味着引導整個Visual Studio。如果這是你想要的,那麼很難在批處理模式下運行。
您可以改爲使用CodeDom進行代碼生成。它不會在EnvDTE或Visual Studio中的任何其他位置上生成代碼。在我的代碼生成器中,我也開始使用Visual Studio Automation,但是當它涉及到批量生成時,我不得不使用CodeDom重做它。
我將不得不考慮/命令選項。引導整個Visual Studio是好的,我更關心自動化過程。我理想的是希望它成爲構建本身的一部分(構建產生的代碼,然後構建)。我不介意爲CodeDom重寫它,但我只有2天的時間分配給這個整個項目,並且重寫這些代碼生成需要一週的時間。 – esac 2009-11-04 01:51:40
更新:查看所有的命令行選項,沒有看到任何執行嚮導的東西,所以我需要將整個嚮導移到一個命令行版本,這似乎不適用於EnvDTE。 – esac 2009-11-04 01:55:35
憑藉我在處理VS集成方面的所有經驗 - 包,CodeGeneration,編輯等與自動化一起工作,仍然讓我感到胃口大開。它非常不穩定,並且比其餘部分更糟。恕我直言,在CodeDom中重寫它比你想到的路徑更容易預測。但是,這一切都取決於您必須切入的代碼生成代碼的數量 – mfeingold 2009-11-04 02:06:07