2012-01-09 63 views
10

正如我的問題所說,我想創建一個基於模板的新項目,該模板已經創建了一個測試並且工作正常,但是當我嘗試在C#代碼中執行時遇到了兩個問題mvc3項目)。以編程方式創建一個Visual Studio項目

  1. 哪些EnvDTE80, EnvDTE90 and EnvDTE100之間的差異,因爲我試圖做this exampleEnvDTE100,但它不工作,因爲對象處理它Solution4Solution2Solution4不具有相同的行爲。
  2. 如何創建不使用默認路徑的項目,但我需要一個特定的文件夾

UPDATE

這裏,如果我使用的DLL稱爲EnvDTE80

,工程代碼
System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0"); 
    Object obj = System.Activator.CreateInstance(type, true); 
    EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)obj; 
    Solution2 _solution = (Solution2)dte.Solution; 
    string projectTemplatePath = @"C:\Documents and Settings\jmachado\Escritorio"; 
    projectTemplatePath =_solution.GetProjectTemplate("",""); <-- looking for some overload to create project based in a specific folder an not from '<drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language.' 

但是,如果我使用的EnvDTE100

System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0"); 
    Object obj = System.Activator.CreateInstance(type, true); 
    EnvDTE100.DTE2 dte = (EnvDTE100.DTE2)obj; 
    Solution4 _solution = (Solution4)dte.Solution; 
    string projectTemplatePath = @"C:\Documents and Settings\jmachado\Escritorio"; 
    projectTemplatePath =_solution.GetProjectTemplate("",""); <-- looking for some overload to create project based in a specific folder an not from '<drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language.' 

,說的是DTE2不退出的在EnvDTE100

+0

這聽起來像你想參與到一個虛擬目錄,而不是複製所有的代碼在每一個新的項目,你可以使用一個來源,所以您可以一次讓所有的bug修復(而不是解決所有項目)。 http://learn.iis.net/page.aspx/150/understanding-sites-applications-and-virtual-directories-on-iis/ – ThePower 2012-01-09 15:13:10

+1

你可以分享一些你實際試圖達到的例子代碼來澄清你的問題? – 2012-01-09 15:13:21

+0

@Joachim伊薩克森肯定,給予兩分鐘更新問題 – Jorge 2012-01-09 15:14:59

回答

7

EnvDTE80,EnvDTE90和EnvDTE100命名空間是VS 8.0(2005年),9.0(2008)和10.0(2010),DTE類型庫,相應地。

只有兩個DTE根對象接口,從VS2010到DTE2是最新的。因此,要獲得DTE對象的VS 2010,你這樣做:

System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0"); 
Object obj = System.Activator.CreateInstance(type, true); 
EnvDTE8.DTE2 dte = (EnvDTE100.DTE2)obj; 

注意,進程id是「10.0」,但變量類型仍然是EnvDTE8.DTE2

其餘的應該從那裏工作。還請注意,如果您需要它,您總是可以將Solution4投射到Solution2(但GetProjectTemplate應直接在Solution4上提供)。

+0

嗨,感謝您的提問,現在仍然存在我的第二個問題,我如何使用不同於Visual Studio默認的特定路徑創建項目? – Jorge 2012-01-12 02:26:34

+0

我不太瞭解這個請求。如果你有一個你自己沒有複製到VS模板文件夾的自定義項目模板,那麼不要使用'GetProjectTemplate',而是直接將模板的完整路徑傳遞給'AddFromTemplate'。 – 2012-01-12 23:13:51

+0

有沒有VS2015的等價物,還是我們只用DTE100? – tofutim 2016-08-12 22:42:09

相關問題