awj*_*awj 5 events extensibility add-in visual-studio
任何人都可以提出补充解决方案或项目活动,如ProjectAdded,到Visual Studio插件的最佳地点?
如果我这样做,当外接连接那么就没有加载的解决方案,所以我怎么能知道当一个解决方案已经被加载?
例如,如果我编写一个事件来处理正在添加的项目项目,我应该在哪里附加它?本次活动将通过该项目被解雇,而这又通过该解决方案,所以我不能当外接连接,因为没有解决外接所连接时连接的事件.
在另一方面,如果我在执行exec()事件中添加他们,那么我需要做的检查,如该事件是否已经被连接,我敢肯定,必须有连接事件和Exec之间建立更合适的方法有时()事件.
您可能很久以前就已经想到了这一点,但无论如何:您可以从OnConnection下面显示的内部设置您的事件,这是Addin的Connect类的片段(假设您正在使用c#):
using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using EnvDTE;
using EnvDTE80;
using Extensibility;
using Microsoft.VisualStudio.CommandBars;
namespace MyAddin1
{
/// <summary>The object for implementing an Add-in.</summary>
/// <seealso class='IDTExtensibility2' />
public class Connect : IDTExtensibility2, IDTCommandTarget
{
private DTE2 _applicationObject;
private AddIn _addInInstance;
private SolutionEvents _solutionEvents;
public void OnConnection(object application, ext_ConnectMode connectMode,
object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
// check the value of connectMode here, depending on your scenario
if(connectMode == ...)
SetupEvents();
}
private void SetupEvents()
{
// this is important ...
_solutionEvents = _applicationObject.Events.SolutionEvents;
// wire up the events you need
_solutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(_solutionEvents_Opened);
_solutionEvents.AfterClosing += new _dispSolutionEvents_AfterClosingEventHandler(_solutionEvents_AfterClosing);
_solutionEvents.ProjectAdded += new _dispSolutionEvents_ProjectAddedEventHandler(_solutionEvents_ProjectAdded);
}
// add procedures to handle the events here, plus any other
// handling you need, ie. OnDisconnection and friends
}
Run Code Online (Sandbox Code Playgroud)
重点是,要连接所需的解决方案和项目事件,如果已经加载了解决方案或项目,那么这一点并不重要.它们不附加到任何特定的解决方案或项目,它们由Visual Studio对象模型提供,并嵌入在EnvDTE命名空间中.
无论如何,做任何其他事情都没有多大意义,因为你可以在VS启动时配置一个加载项加载,在这种情况下,永远不会有任何解决方案/项目加载.
虽然有几个渔获量:
connectMode传入的参数OnConnection.这会被不同的参数多次调用,如果你以错误的方式执行,你可能会多次连接事件,这肯定会成为一个问题.此外,通常任何Addin IDE,如菜单和东西,都是从内部设置的OnConnection,因此如果你做得不对,最终可能会出现重复的菜单项.这里有一些指针,提供的一些代码是VB代码,以防你正在寻找:
最后,这里有一个文章列表,其中约70%涵盖了有关插件的基本和高级主题:
找到名为MZ-Tools文章系列(关于加载项)的部分,并查看其中包含的内容.