我正在开发vs 2013 C#Extension项目。使用Windows&和.NET 4.5 vsix扩展,安装后,工作正常。但是,在添加一些更改之后,事情发生了一段时间,我无法再在调试器中启动扩展。在visual studio中选择扩展项目然后选择debug->启动新实例会导致VS运行其编译步骤,然后启动具有扩展的vs的新版本。然而,在VS黑色启动矩形出现后不久出现弹出窗口,显示消息"操作无法完成 - 不支持此类界面"。调试器已启动并显示正在" Progress Window"中加载的模块。加载的最后一个模块是ENVDTE80。
使用/ log运行devenv并复制日志文件,而"操作无法..."正在显示的消息显示最后一个条目
<entry> <record>1294</record> <time>2016/02/09 16:53:22.122</time> <type>Information</type> <source>VisualStudio</source> <description>Leaving function VBDispatch::GetTypeLib</description> <guid>{80CC9F66-E7D8-4DDD-85B6-D9E6CD0E93E2}</guid>
</entry> </activity>
引用的guid在整个活动中出现过很多次。日志。
我查看了来自devenv / LOG日志的奇怪的小错误消息。我从visual studio中卸载了VSIX应用程序,然后尝试调试&gt;但那里没有快乐。我已经卸载了可视工作室并重新安装。我修复了.NET安装。我修复了SDK。没有任何效果。还有其他一些早期和更简单版本的扩展和测试版本可以正常调试。我倾向于认为某处有一些注册表项无法运行此代码。
从devenv活动日志中我看到以下错误消息:
<description>PkgDef configuration error. ApplicationExtensionsFolder omitted from PkgDefSearchPath</description>
The clients rights token could not be found at ....
Extension will not be loaded because an extension with the same ID 'Microsoft.Windows.DevelopmentKit.Desktop' is already loaded at > C:\PROGRAM FILES (X86)\COMMON FILES\MICROSOFT\EXTENSIONMANAGER\EXTENSIONS\MICROSOFT\WINDOWS KITS\8.0\DESKTOP SDK\...</description>
我还运行procmon并在debug-&gt;启动单独实例和错误消息的呈现之间捕获事件。两个pid>跟踪:一个用于原始devenv,另一个用于正在调试的扩展。调试扩展的所有注册表事务都属于:成功,未找到名称,找不到更多名称或缓冲溢出。没有明显的(对我而言)单一错误情况。
在调试扩展的最后一个pid条目之后,与启动devenv相关联的pid有几个与HKLM \ SOFTWARE \ Microsoft \ SQMClient \ Windows \ CommonDatapoints关联的ACCESS DENIED条目。
将devenv.log与procmon进行比较,显然在ENVDTE80的devenv.log中的最后一个条目之后继续处理。我没有&gt;似乎随处可见这种相关性。
我已经搜索了很多内容。
重新注册dll的常见建议在这里尚未证明有用(但是)(虽然它似乎修复了IE问题,这使得它看起来很有吸引力)。
还取消/重新安装.Net 3.5(.1)无效。运行sfc / scannow没有效果。运行NetFxRepairTool没有任何效果。重建VS扩展实验配置单元(12.0-Exp)没有任何效果。已取消/重新安装vs2013且SDK无效已卸载其他版本的VS和配对SDK无效
答案 0 :(得分:0)
我有更多时间来看这个。我卸载vs sdk和vs 2013 pro并重新启动。在重新安装的2013专业版和我下载的dotnetframework分析工具中运行它。我修复了dot net 4.5.1。然后分析说我修复了dot net 4.6.1。再次重新启动。试图在debug中运行vs扩展,并获得与Ext hive锁文件相关的不同错误。这是对先前未知接口消息的改进。在启用devenv日志文件的情况下再次运行调试。 devenv日志中引用的锁定文件在以/ Exp目录名称结尾的路径和/....lock文件名之间具有“%&amp; 00A%&amp; 00D”表示法。编辑了配置文件以从/ RootSuffix Exp条目的末尾删除cr / lf,然后调试工作。