2012-01-09 16 views
10

Moje pytanie mówi, że chcę utworzyć nowy projekt oparty na szablonie, który już stworzył testowany i działa dobrze, ale mam dwa problemy, gdy próbowałem zrobić to w kodzie C# (w projekt mvc3).Utwórz program Visual Studio programowo

  1. Jakie są różnice między EnvDTE80, EnvDTE90 and EnvDTE100 ponieważ próbowałem zrobić this example z EnvDTE100 ale to nie działa, ponieważ obiekt obsłużyć to Solution4 nie Solution2 i Solution4 nie mają takie samo zachowanie.
  2. W jaki sposób można utworzyć projekt bez użycia domyślną ścieżkę, ale dany folder, że muszę

UPDATE

oto kod, który działa, jeśli użyłem dll o nazwie 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.' 

ale gdybym użył 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.' 

i powiedzieć, że DTE2 nie wyjść w przestrzeni nazw EnvDTE100

+0

Wygląda na to, że chcesz zaangażować się w katalog wirtualny, zamiast kopiować cały kod do każdego nowego projektu, z którego można korzystać z jednego źródła, aby można było wprowadzać wszystkie poprawki błędów na raz (zamiast naprawiać wszystkie projektowanie). http://learn.iis.net/page.aspx/150/understanding-sites-applications-and-virtual-directories-on-iis/ – ThePower

+1

Czy możesz podać przykładowy kod tego, co naprawdę chcesz osiągnąć, aby wyjaśnić Twoje pytanie? –

+0

@ Joachim Isaksson z pewnością poświęcić dwie minuty na zaktualizowanie pytania – Jorge

Odpowiedz

7

EnvDTE80, EnvDTE90 i EnvDTE100 są biblioteki typu DTE dla VS 8.0 (2005), 9,0 (2008) i 10,0 (2010), odpowiednio.

Istnieją tylko dwa interfejsy obiektu root DTE, począwszy od VS2010 - najnowszy DTE2. Tak więc, aby uzyskać obiekt DTE dla VS 2010, robisz:

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

Zauważ, że jest ProgID dla „10,0”, ale typ zmiennej jest nadal EnvDTE8.DTE2.

Reszta powinna działać stamtąd. Pamiętaj też, że zawsze możesz odrzucić Solution4 do Solution2, jeśli jest to potrzebne (ale GetProjectTemplate powinno być dostępne bezpośrednio pod adresem Solution4).

+0

Witam i dziękuję za pytanie, które wciąż pozostaje moim drugim problemem, jak mogę utworzyć projekt o określonej ścieżce innej niż studio wizualne? – Jorge

+0

Nie bardzo rozumiem prośbę. Jeśli masz niestandardowy własny szablon projektu, którego nie skopiowałeś do folderu szablonów VS, nie używaj 'GetProjectTemplate', ale po prostu przekaż pełną ścieżkę do szablonu bezpośrednio do' AddFromTemplate'. –

+0

czy istnieje odpowiednik VS2015, czy po prostu używamy DTE100? – tofutim

Powiązane problemy