Tha*_*lia 3 extension-methods solution visual-studio-2010 envdte
是否可以从命令行项目修改解决方案并使用envdte工具?
我有一个修改解决方案的加载项.但是......超过一百个项目需要进行更改...所以我想制作具有相同逻辑的ac#程序,只需遍历所有解决方案文件.
加载项以.开头
EnvDTE.Solution solution = (EnvDTE.Solution)application.Solution;
Run Code Online (Sandbox Code Playgroud)
DTE2 application
从加载项传递到哪里...
我如何获得相同的解决方案,然后我查询项目...从一个单独的程序,只会知道solutionPath?
是否可以打开解决方案,处理它并关闭它 - 继续下一个解决方案?
Microsoft给出了这个示例http://msdn.microsoft.com/en-us/library/envdte._solution.open(v=vs.100).aspx
但我不知道dte在上下文中是什么...
谢谢...
VS 2010
编辑:我做了以下答案的建议.稍微修改,使用链接:http: //msdn.microsoft.com/en-us/library/ms228772(v = vs.100).aspx
谢谢
是的你可以.您只需要使用Visual Studio的COM CLSID激活实例.一个例子如下.它实际上创建了一个解决方案并向其添加了两个项目,但在打开现有解决方案时也适用相同的初始化
几点需要注意:
注意COM线程模型.从控制台应用程序模板创建的代码就足够了:
[STAThread]
static void Main()
Run Code Online (Sandbox Code Playgroud)如果您安装了强大的VS扩展,例如ReSharper,那么如果您不需要VS自动化,最好暂停它.ReSharper有VS命令来控制它.
Console.WriteLine("Opening Visual Studio");
var dte = (DTE)Activator.CreateInstance(Type.GetTypeFromProgID("VisualStudio.DTE.10.0",true),true);
Console.WriteLine("Suspending Resharper");
dte.ExecuteCommand("ReSharper_Suspend");
Console.WriteLine("Working with {0}, {1} edition", dte.FullName, dte.Edition);
dte.SuppressUI = true;
dte.UserControl = false;
foreach (var solution in mySolutionInfoList)
{
try
{
dte.Solution.Create(solution.directory, solution.name);
dte.Solution.AddFromTemplate(csharpTemplatePath, solution.directory + "ClassLibrary1", "ClassLibrary1");
dte.Solution.AddFromTemplate(vcTemplatePath, solution.directory + "Win32Dll", "Win32Dll");
Directory.CreateDirectory(solution.directory); // ensure directory exists. Otherwise, user will be asked for save location, regardless of SupressUI value
dte.Solution.Close(true);
Console.WriteLine();
}
catch (Exception e)
{
Console.Error.WriteLine(e);
}
}
Console.WriteLine("Resuming Resharper");
dte.ExecuteCommand("ReSharper_Resume");
try
{
dte.Quit();
}
catch (Exception e)
{
Console.Error.WriteLine(e);
}
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
2077 次 |
最近记录: |