问题
As my question say I want to create a new project based in a template which already created an tested and works fine, but i have two problems when i tried to do it in C# code (in a mvc3 project).
- Which are the differences between
EnvDTE80, EnvDTE90 and EnvDTE100
because i tried to do this example withEnvDTE100
but it doesn't work because the object handle it'sSolution4
notSolution2
andSolution4
doesn't have the same behavior. - How can I create the project without use the default path, but an specific folder that i need
UPDATE
here's the code that works if I used the dll called 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.'
But if i used the 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.'
and Say's that DTE2 doesn't exit's in the namespace of EnvDTE100
回答1:
EnvDTE80, EnvDTE90 and EnvDTE100 are DTE type libraries for VS 8.0 (2005), 9.0 (2008) and 10.0 (2010), correspondingly.
There are only two DTE root object interfaces, as of VS2010 - DTE2 being the latest. So, to get the DTE object for VS 2010, you do:
System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
Object obj = System.Activator.CreateInstance(type, true);
EnvDTE80.DTE2 dte = (EnvDTE100.DTE2)obj;
Note that ProgID is for "10.0", but variable type is still EnvDTE80.DTE2
.
The rest should work from there. Note also that you can always cast Solution4
to Solution2
if you need it (but GetProjectTemplate
should be available directly on Solution4
).
来源:https://stackoverflow.com/questions/8790528/create-a-visual-studio-project-programmatically