和我一起学VSTA(Visual Studio Tools for Applications )(四)
前三篇简单介绍了VSTA的用途以及开发前期准备,这一篇将介绍具体的开发。
我们先实现一个最简单的功能,打开VSTA IDE编程环境。
首先在VSTASAMPLE项目中,添加如下引用:
以及:
Microsoft Development Enviroment 8.0.
DTEProvider 1.0 Type Library
添加HostItemProvider.cs,代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.AddIn.Contract;
5
using System.AddIn.Contract.Automation;
6
using System.Runtime.Remoting;
7
using Microsoft.VisualStudio.Tools.Applications.Contract;
8
using Microsoft.VisualStudio.Tools.Applications;
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
namespace VSTASample
11
{
12
internal class HostItemProvider : ContractAdapterBase,
13
IHostItemProviderContract
14
{
15
private VSTAApplication application;
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
public HostItemProvider( VSTAApplication application,
18
TypeInfrastructureManager typeInfrastructureManager )
19
: base(typeInfrastructureManager)
20
{
21
this.application = application;
22
}
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
protected override IContract QueryContract( string contractId )
25
{
26
if(String.Compare(contractId,
27
typeof(IHostItemProviderContract).AssemblyQualifiedName,
28
StringComparison.Ordinal) == 0)
29
{
30
return (IContract)this;
31
}
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
return base.QueryContract(contractId);
34
}
35![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
public IRemoteObjectContract GetHostObject( string objectType, string cookie )
37
{
38
if(String.Compare(objectType,
39
typeof(RCS.Common.VSTA.VSTAApplication).FullName,
40
StringComparison.Ordinal) == 0)
41
{
42
RemoteObjectAdapter adapter = new RemoteObjectAdapter(
43
typeof(RCS.Common.VSTA.VSTAApplication),
44
application, TypeInfrastructureManager);
45
return adapter;
46
}
47![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
throw new ArgumentOutOfRangeException();
49
}
50![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
protected override string RemoteToString()
52
{
53
return this.ToString();
54
}
55![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
protected override int GetRemoteHashCode()
57
{
58
return this.GetHashCode();
59
}
60![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
protected override bool RemoteEquals( IContract contract )
62
{
63
if(contract == null)
64
return false;
65![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
if(!System.Runtime.Remoting.RemotingServices.
67
IsObjectOutOfAppDomain(contract))
68
{
69
HostItemProvider contractAdapter =
70
contract as HostItemProvider;
71
return this.Equals(contractAdapter);
72
}
73![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
return false;
75
}
76
}
77
}
78![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
添加一个IDEManagement.cs,代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Reflection;
5
using System.Windows.Forms;
6
using Microsoft.VisualStudio.Tools.Applications;
7
using Microsoft.VisualStudio.Tools.Applications.Contract;
8
using Microsoft.VisualStudio.Tools.Applications.DesignTime.Interop;
9
using System.AddIn.Contract.Automation;
10
using EnvDTE80;
11
using VSTADTEProvider.Interop;
12
using System.IO;
13
using System.Collections;
14
using EnvDTE;
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
namespace VSTASample
17
{
18
/// <summary>
19
/// VSTA操作方法类
20
/// </summary>
21
internal partial class IDEManagement
22
{
23
private VSTAApplication application;
24
//private Context macroContext;
25
//private AddInCollection addInCollection;
26
private IHostItemProviderContract itemProvider;
27
private TypeInfrastructureManager typeInfrastructureManager;
28
private EnvDTE.DTE vstaDTE;
29
private EnvDTE.Project macroProject;
30
//private IEntryPointContract[] hostItems;
31
private string hostID;
32
private string templateName;
33![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
/// <summary>
35
/// 初始化Extension类的新实例。
36
/// </summary>
37
internal IDEManagement()
38
{
39
InitializeTypeInfrastructureManager();
40
}
41![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
43
internal void Connect(VSTAApplication application, string hostID,string templateName)
44
{
45
this.application = application;
46
this.application.IDEManagement = this;
47
this.hostID = hostID;
48
this.templateName = templateName;
49![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
this.itemProvider = new HostItemProvider(application,TypeInfrastructureManager);
51
//this.macroPath = @"C:\ShapeAppSamples\MyVSTADLLTest\Macros\bin";
52
//LoadAddIns();
53
//InitializeMenus();
54![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
}
56
57
Internal Properties
67![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
/// <summary>
69
/// 打开脚本编程环境
70
/// </summary>
71
/// <param name="projectDirectory">脚本程序所在目录</param>
72
/// <param name="projectFilename">脚本程序工程文件名称(*.vbproj)</param>
73
/// <returns></returns>
74
public bool StartIDE(string projectDirectory, string projectFilename)
75
{
76
EnsureIDE(hostID);
77
if (vstaDTE.MainWindow.Visible)
78
{
79
//vstaDTE.MainWindow.Activate();
80
vstaDTE.MainWindow.SetFocus();
81
return true;
82
}
83
else
84
{
85
vstaDTE.MainWindow.Visible = true;
86
vstaDTE.MainWindow.WindowState = EnvDTE.vsWindowState.vsWindowStateMaximize;
87
string projectFilePath = System.IO.Path.Combine(projectDirectory, projectFilename);
88
if (System.IO.File.Exists(projectFilePath))
89
{
90
OpenMacroProject(projectFilePath);
91
}
92
else
93
{
94
try
95
{
96
CreateNewMacroProject(projectDirectory, projectFilename);
97
}
98
catch(Exception e)
99
{
100
MessageBox.Show(
101
e.Message,
102
hostID, MessageBoxButtons.OK, MessageBoxIcon.Error);
103
this.vstaDTE.Quit();
104
vstaDTE = null;
105
return false;
106
}
107
}
108
return true;
109
}
110
}
111![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
112
private void EnsureIDE(string hostID)
113
{
114
if (this.vstaDTE == null)
115
{
116
try
117
{
118
IDTEProvider dteProvider = new VSTADTEProviderClass();
119
//string HostID = "MyVSTADLLTest";
120
UInt32 TimeOut = 10000;
121
vstaDTE = dteProvider.GetDTE(hostID, TimeOut);
122
System.Diagnostics.Debug.Assert(this.vstaDTE != null);
123
}
124
catch
125
{
126
// If DTEProvider does not work, try co-creating DTE instead.
127
object objDTE = new EnvDTE.DTE();
128
this.vstaDTE = (EnvDTE.DTE)objDTE;
129
}
130![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
//vstaDTE.MainWindow.Visible = true;
132
//增加关闭IDE窗口时关闭vsta.exe进程以及编译
133
EnvDTE.CommandEvents commandEvents = vstaDTE.Events.get_CommandEvents("{00000000-0000-0000-0000-000000000000}", 0);
134![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
commandEvents.BeforeExecute += new EnvDTE._dispCommandEvents_BeforeExecuteEventHandler(commandEvents_BeforeExecute);
136![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
//get and subscribe to the File.Exit event prior to execution
138
EnvDTE.CommandEvents exitCommand = vstaDTE.Events.get_CommandEvents("{5EFC7975-14BC-11CF-9B2B-00AA00573819}", 229);
139![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
140
exitCommand.BeforeExecute += new EnvDTE._dispCommandEvents_BeforeExecuteEventHandler(exitCommand_BeforeExecute);
141
}
142
}
143![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
144
/// <summary>
145
/// 关闭IDE
146
/// </summary>
147
public void ExitIDE()
148
{
149
if(this.vstaDTE != null)
150
{
151
if(this.vstaDTE.Mode == EnvDTE.vsIDEMode.vsIDEModeDebug)
152
{
153
this.vstaDTE.Debugger.Stop(true);
154
}
155
this.macroProject.Save(null);
156
this.vstaDTE.Quit();
157
}
158
private void CreateNewMacroProject(string projectDirectory, string projectFileName)
159
{
160
Solution2 sol = (Solution2)vstaDTE.Solution;
161
//string projectTemplatePath = @"C:\ShapeAppSamples\VSTATest\templates\VisualBasic\1033\";
162
string projectTemplatePath = sol.GetProjectTemplate(templateName, "VisualBasic");
163
//string targetProjectDirectory = @"C:\ShapeAppSamples\MyVSTADLLTest\Macros";
164
//string targetProjectFilename = "MyEventSampleMacro.vbproj";
165![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
166
this.vstaDTE.Solution.AddFromTemplate(projectTemplatePath,projectDirectory, projectFileName, true);
167
this.vstaDTE.Solution.SolutionBuild.Build(true);
168
}
169
170
private void OpenMacroProject(string projectFilePath)
171
{
172
//string projectFilePath = @"C:\ShapeAppSamples\MyVSTADLLTest\Macros\MyEventSampleMacro.vbproj";
173
this.macroProject = this.vstaDTE.Solution.AddFromFile(projectFilePath, true);
174
//vstaDTE.MainWindow.Visible = true;
175
}
176![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
EnvDTE.CodeElement FindCodeElementInCodeElements(EnvDTE.CodeElements codeElems, EnvDTE.vsCMElement kind, string fullName)
178
{
179
foreach (EnvDTE.CodeElement codeElem in codeElems)
180
{
181
if (codeElem.Kind == kind)
182
{
183
if (codeElem.FullName == fullName)
184
{
185
if (codeElem.Kind == EnvDTE.vsCMElement.vsCMElementFunction)
186
{
187
EnvDTE.CodeFunction codeFunc = (EnvDTE.CodeFunction)codeElem;
188
if (codeFunc.IsOverloaded)
189
{
190
if (codeFunc.Parameters.Count != 0)
191
{
192
continue;
193
}
194
}
195
}
196![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
197
return codeElem;
198
}
199
}
200
}
201![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
202
return null;
203
}
204
private void exitCommand_BeforeExecute( string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault )
205
{
206
//Project.IsDirty is always false, so use .Saved which starts true
207
if(this.macroProject.Saved == true)
208
{
209
//prompt the user to save the project
210
this.macroProject.Save(null);
211
//change the saved state
212
this.macroProject.Saved = false;
213![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
214
this.vstaDTE.Solution.SolutionBuild.Build(true);
215
}
216![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
217
//quit the IDE
218
this.vstaDTE.Quit();
219![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
220
this.vstaDTE = null;
221
}
222![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
223
private void commandEvents_BeforeExecute( string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault )
224
{
225
EnvDTE.Command objCommand = default(EnvDTE.Command);
226
//string sCommandName = null;
227![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
228
//break here to check out any commands you are interested in
229
objCommand = vstaDTE.Commands.Item(Guid, ID);
230![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
231
//if((objCommand != null))
232
//{
233
// sCommandName = objCommand.Name;
234![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
235
// if(sCommandName.Equals("Something.WorthWatching"))
236
// {
237
// //do something
238
// }
239
//}
240![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
241
}
242
private void InitializeTypeInfrastructureManager()
243
{
244
if (typeInfrastructureManager == null)
245
{
246
typeInfrastructureManager = new TypeInfrastructureManager();
247![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
248
// This was auto-generated from ProxyGen with the /h:hostmapfile commandline argument.
249![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
250
global::System.Type hostType;
251
global::System.Type proxyType;
252![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
253![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
254
hostType = typeof(global::VSTASample.VSTAApplication);
255
proxyType = typeof(NonProxiableType<global::VSTASample.VSTAApplication>);
256
typeInfrastructureManager.CanonicalNameToTypeMap.Add("VSTASample, VSTASample.VSTAApplication", proxyType);
257
typeInfrastructureManager.TypeToCanonicalNameMap.Add(hostType, "VSTASample, VSTASample.VSTAApplication");
258
}
259
}
260
}
261
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
124
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
126
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
130
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
132
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
134
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
136
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
138
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
139
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
140
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
141
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
142
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
143
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
144
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
145
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
146
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
147
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
148
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
149
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
150
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
151
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
152
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
153
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
155
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
156
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
158
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
159
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
160
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
162
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
164
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
166
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
167
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
168
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
169
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
170
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
171
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
172
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
174
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
175
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
176
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
178
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
179
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
180
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
181
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
182
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
183
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
184
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
185
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
186
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
187
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
188
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
189
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
190
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
191
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
192
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
194
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
195
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
196
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
197
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
198
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
199
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
200
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
201
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
202
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
203
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
204
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
205
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
206
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
207
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
208
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
209
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
210
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
211
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
212
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
213
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
214
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
215
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
216
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
217
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
218
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
219
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
220
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
221
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
222
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
223
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
224
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
225
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
226
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
227
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
228
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
229
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
230
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
231
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
232
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
233
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
234
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
235
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
236
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
237
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
238
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
239
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
240
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
241
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
242
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
243
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
244
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
245
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
246
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
247
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
248
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
249
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
250
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
251
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
252
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
253
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
254
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
255
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
256
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
257
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
258
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
259
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
260
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
261
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
这里,我们为了方便不同的项目调用,用一个操作类来发布,添加一个VSTAHelper.cs,代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Reflection;
5
using EnvDTE;
6
using System.Collections;
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
namespace VSTASample
9
{
10
/// <summary>
11
/// VSTA操作类
12
/// </summary>
13
public class VSTAHelper
14
{
15
private static VSTAHelper instance;
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
/// <summary>
18
/// VSTAHelper类单一实例
19
/// </summary>
20
public static VSTAHelper Instance
21
{
22
get
23
{
24
if(VSTAHelper.instance == null)
25
{
26
VSTAHelper.instance = new VSTAHelper();
27
}
28![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
return VSTAHelper.instance;
30
}
31
}
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
private VSTAApplication app;
34
/// <summary>
35
/// 初始化类的实例。
36
/// </summary>
37
private VSTAHelper()
38
{
39
{
40
app = new VSTAApplication();
41
}
42
}
43![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
/// <summary>
45
/// 打开脚本编程环境
46
/// </summary>
47
/// <returns></returns>
48
/// <param name="projectDirectory">脚本程序所在目录(如:C:\ShapeAppSamples\MyVSTADLLTest\Macros)</param>
49
/// <param name="projectFilename">脚本程序工程文件名称(*.vbproj)</param>
50
/// <example><code>
51
/// private VSTAHelper vstaHelper = new VSTAHelper();
52
/// vstaHelper.StartIDE(@"..\Solutions\自动计量\script\Demo","Demo.vbproj");
53
/// </code></example>
54
public void StartIDE( string projectDirectory, string projectFilename )
55
{
56
//using(MessageFilter messageFilter = new MessageFilter())
57
{
58
app.IDEManagement.StartIDE(projectDirectory, projectFilename);
59
}
60
}
61![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
/// <summary>
63
/// 关闭IDE
64
/// </summary>
65
/// <example><code>
66
/// private VSTAHelper vstaHelper = new VSTAHelper();
67
/// vstaHelper.ExitIDE();
68
/// </code></example>
69
public void ExitIDE()
70
{
71
app.IDEManagement.ExitIDE();
72
}
73![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
}
75
internal partial class VSTAApplication
76
{
77
private IDEManagement ideManagement;
78
/// <summary>
79
/// 操作方法类
80
/// </summary>
81
public IDEManagement IDEManagement
82
{
83
get
84
{
85
if(this.ideManagement == null)
86
{
87
ideManagement = new IDEManagement();
88
ideManagement.Connect(this, "VSTAHelper", "dlladdin.zip");
89
}
90
return ideManagement;
91
}
92
set
93
{
94
ideManagement = value;
95
}
96
}
97![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
98
}
99
}
100![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
编译生成。
下面就是新建个winform项目,使用操作类即可。
VSTASample.VSTAHelper.Instance.StartIDE(projectPath,projectFileName);