我使用"Visual Studio的加载项"向导来创建一个新的Addin项目,现在,我正在尝试添加一些事件处理程序:
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
_applicationObject.Events.BuildEvents.OnBuildBegin += BuildEvents_OnBuildBegin;
_applicationObject.Events.BuildEvents.OnBuildDone += BuildEvents_OnBuildDone;
_applicationObject.Events.SelectionEvents.OnChange += SelectionEvents_OnChange;
_applicationObject.Events.DocumentEvents.DocumentOpened += DocumentEvents_DocumentOpened;
_applicationObject.Events.DocumentEvents.DocumentSaved += DocumentEvents_DocumentSaved;
}
Run Code Online (Sandbox Code Playgroud)
但无论我做什么,我的处理程序都不会执行!
我瞎了吗?我是否必须做任何其他事情来注册这些处理程序或为什么它不起作用?
我正在编写一个简单的Visual Studio 2010加载项,以便在工作中执行常见的复制工作(从libs sln获取dll).
我希望将复制的进度写入输出窗口.
我试过Trace.WriteLine(...)要做到这一点,但是当我在调试器中运行加载项时却没有.我还没有尝试过任何其他方式.
我在Visual Studio 2008中找到了一些这样做的示例,但是无法引用所需的库.
谁能指点我如何写入输出窗口?我的谷歌搜索技能让我失望.
我试图为Visual Studio编写一个编辑器扩展.我有下载的VS SDK并创建了一个新的Visual Studio Package项目.但为我创建的虚拟控件是Windows窗体控件而不是WPF控件.我试图用WPF控件取而代之,但效果不佳.无论如何这可能吗?
另一个相关问题:是否只能编写文本编辑器?我真正想要的是一个看起来更像是具有许多不同领域的表单的编辑器.但它似乎不是这样做的?EditorPane上有许多接口仅暗示文本编辑器模型.
理想情况下,我想要一个与resx-editor非常相似的编辑器,其中正在编辑的文件具有xml-content,而editor-ui不是单个文本框,并且生成的cs文件作为子文件输出.这可能与编辑器扩展有关吗?
我正在开发一个涉及创建动态链接库的项目,所以我想在Visual Studio的控制台应用程序中测试它.
DLL也是在Visual Studio中制作的,它没有太多,只有一些功能.我不确定我是否应该在属性中的include目录面板中包含librarys标头,或者做其他事情
很多人说我应该.lib在Library或Reference目录中添加相应的文件,但我不确定VS是否.lib在DLL旁边生成了一个文件.我正在使用VS 2015.
我在Javascript Web Office Addins中有关于"console.log"的问题.目前我正在使用Javascript Word Addin并且无法对其进行故障排除,因为我不明白"console.log"输出的发送位置.在Microsoft站点上有很多示例,其中包含"console.log",但它们从未指定如何检查这些输出.
所以,问题是如何才能看到这个"console.log"输出.我没有使用Visual Studio.
BR,阿列克谢
一些用户报告说,如果他们通过双击Excel文件启动Excel,则加载项将不会加载.但是,如果他们通过"开始"菜单(或"快速启动"工具栏)打开Excel,则加载项可以正常加载.
一些细节,以防他们帮助:
任何有关原因的想法或如何解决这个问题将不胜感激.
更新:我相信我找到了解决这个问题的方法.
当注册IDTExtensibility2 dll时,它会自动为加载行为,加载项名称等创建HKCU条目.但是我也让我的安装文件注册了HKLM的加载项,以便所有用户都可以使用它.机.这导致系统上的双重注册表项.
我不认为这会是问题的原因.我手动编辑了HKCU条目,Excel似乎忽略了它们并遵循HKLM条目.但是,我收到另一位开发人员的提示,解释他们遇到了同样的问题,他们的解决方案是删除重复的注册表项.我试过了,似乎已经解决了报告这个bug的(极少数)人的问题.
下面的Inno设置代码将添加HKLM条目,仔细检查加载行为是否正确(因为我是偏执狂),然后删除HKCU条目.在您看到所有大写字母的任何地方替换您的文件属性.
[Registry]
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: FriendlyName; ValueData: ADDIN_NAME
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: Description; ValueData: ADDIN_DESC
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: LoadBehavior; ValueData: 3
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: CommandLineSafe; ValueData: 0
// Set load behavior to on start up
procedure ResetAddinRegKeys();
var
bUpdate : Boolean;
LoadBehaviorKey : Cardinal;
begin …Run Code Online (Sandbox Code Playgroud) 我想在Visual Studio 2010中使用带有C#的DTE2对象来获得对当前解决方案的引用.
我首先尝试了以下代码:
var dte = Marshal.GetActiveObject("VisualStudio.DTE.10.0") as EnvDTE80.DTE2;
Run Code Online (Sandbox Code Playgroud)
但是当我打开2个解决方案,并且这个代码在第一个解决方案中时,我得不到对当前解决方案的引用,而是对我加载的最后一个解决方案的引用.我需要当前的解决方案......
在互联网上搜索,我发现以下解决方案如何从VSPackage获取当前的解决方案目录?:
// Get an instance of the currently running Visual Studio IDE
DTE dte = (DTE)GetService(typeof(DTE));
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时,我的dte对象总是为NULL.
那么如何使用C#on .net framework 4.0获取VS2010中当前的解决方案对象?
有时我浪费时间在运行时在对象中搜索值.
当然你 - 都知道这个任务 - >打开QuickWatch视图并浏览属性,直到找到你要找的东西.
我正在寻找一个工具/加载项/扩展,可以在对象中搜索值.
带有搜索增强功能的QuickWatch视图将是perferct :)
SB.知道一个工具?
谢谢!
我安装了SQL Server 2008 R2.
过去我安装了Redgate Sql Promprt 5加载项.它不再起作用,但我仍然在SQL Management Studio中有菜单.
我没有在Windows 7 的程序和功能列表中看到加载项,因此我无法卸载它.当我点击菜单中的命令时,我收到以下消息:
无法加载支持此命令的加载项.你想删除命令吗?
当我选择"是"时,它仅从菜单中删除所选命令.
我想从Management Studio中完全删除加载项.
我在哪里可以找到加载项以及在哪里可以在Management Studio 2008 R2中配置它们?
如果我需要删除一些文件来摆脱它,我在哪里可以找到这些文件?我查看了安装文件夹,但没有找到任何关于加载项的信息......
我正在使用Visual Studio 2008中的VSTO开发Word 2007-2010插件.在我的插件中,我需要为每个打开的word文档创建一个自定义任务窗格.基本上,我需要为每个文档创建一个任务窗格,在文档窗口中显示正确的任务窗格,在文档关闭时执行某些操作,然后删除任务窗格及其所有引用.
这是我到目前为止所做的:
任务窗格创建
我为每个新的,打开的或现有的加载文档创建一个自定义任务窗格,如下所示:
((ApplicationEvents4_Event) Application).NewDocument += CreateTaskPaneWrapper;
Application.DocumentOpen += CreateTaskPaneWrapper;
foreach (Document document in Application.Documents)
{
CreateTaskPaneWrapper(document);
}
Run Code Online (Sandbox Code Playgroud)
在CreateTaskPaneWrapper方法中,如果文档的任务窗格已存在,则检查Dictionary <Document,TaskPaneWrapper>.我这样做是因为如果我尝试打开已打开的文档,则会触发open事件.如果它不存在,我创建一个新的TaskPaneWrapper类.在其构造函数中,我创建了一个新的任务窗格,并将其添加到CustomTaskPanes集合中
Globals.ThisAddIn.CustomTaskPanes.Add(taskPane, "Title");
Run Code Online (Sandbox Code Playgroud)
根据MSDN,这将任务窗格与当前活动窗口相关联.
任务窗格关闭
Document.Close和Application.DocumentBeforeClose事件都不适合我,因为它们在用户发出关闭文档的确认之前触发.所以我在TaskPaneWrapper类中使用Microsoft.Office.Tools.Word.Document.Shutdown事件,如下所示:
_vstoDocument = document.GetVstoObject();
_vstoDocument.Shutdown += OnShutdown;
private void OnShutdown(object sender, EventArgs eventArgs)
{
Globals.ThisAddIn.CustomTaskPanes.Remove(_taskPane);
//additional shutdown logic
}
Run Code Online (Sandbox Code Playgroud)
所有这些似乎都很好用,创建了任务窗格,绑定到相应的窗口,并成功删除.但是,我仍有一个问题 - 当我启动Word时,会打开一个空白文档.如果我然后打开现有文档而不更改空白文档,则删除空白文档及其窗口,而不会触发Document.Close,Application.DocumentBeforeClose和Microsoft.Office.Tools.Word.Document.Shutdown事件.因为未调用OnShutdown并且未删除空白文档的任务窗格,所以下一个文档窗口包含两个任务窗格 - 非常新的任务窗格,以及第一个(孤立的)任务窗格.如何删除此孤立的任务窗格?访问已删除的文档或窗口引用会抛出COMException("对象已被删除").我暂时使用这个黑客:
//A property in my TaskPaneWrapper class
public bool IsWindowAlive()
{
try
{
var window = _vstoDocument.ActiveWindow;
return true;
}
catch (COMException)
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在CreateTaskPaneWrapper方法中,我检查此属性是否包含所有现有包装器,并关闭属性为false的那些包装器.当然,捕捉异常有点贵,而且这个解决方案非常糟糕,所以我想知道,有更好的解决方案吗? …