- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一段时间以来,我在 Visual Studio 2010 的 VSIX 包中观察到间歇性 COM 问题。尝试订阅 IDE 的一个基于 COM 的事件接收器会随机引发以下错误:
“无法使用与其底层 RCW 分离的 COM 对象”
重现案例归结为这段代码(显然必须在 VSIX 中使用):
using System;
using EnvDTE;
using EnvDTE80;
class Test
{
private readonly Events _events;
private readonly Events2 _events2;
private readonly BuildEvents _buildEvents;
private readonly ProjectItemsEvents _projectItemsEvents;
public Test(IServiceProvider provider)
{
var dte = (DTE)provider.GetService(typeof(DTE));
var dte2 = (DTE2)dte;
// Store all references in fields as a GC precaution.
_events = dte.Events;
_events2 = (Events2)dte2.Events;
_buildEvents = _events.BuildEvents;
_projectItemsEvents = _events2.ProjectItemsEvents;
// Proceed to subscribe to event sinks.
_buildEvents.OnBuildBegin += BuildBeginHandler; // BOOM!
_projectItemsEvents.ItemAdded += ItemAddedHandler;
}
private void ItemAddedHandler(ProjectItem projectItem) { }
private void BuildBeginHandler(vsBuildScope scope, vsBuildAction action) { }
}
我从网上找到的大量类似问题的描述中了解到可能的原因。这基本上是 COM 互操作期间运行时可调用包装器和 GC 交互方式的副作用。这是一个 link一个类似的问题完整的解释。
我同意这个解释,尤其是因为它提出了一个简单的解决方法——将事件接收器引用存储在一个字段中,以防止它被过早地进行 GC。事实上,许多人似乎已经通过这种方式解决了他们的问题。
令我困扰的是它在我的情况下不起作用。我真的很困惑为什么。正如您清楚地看到的那样,作为预防措施,我已经将所有 对象引用存储在字段中。但是错误仍然存在。我尝试在 ctor 末尾使用 GC.KeepAlive()
调用更加明确,但无济于事。还有什么事要做吗?
如果没有解决方案,我的 VSIX 会随机加载失败,用户只有一个选择:重新启动 Visual Studio 并希望下次不会发生这种情况。
我们将不胜感激任何帮助!
最佳答案
好吧,我放弃了,只是做了我唯一想到的事情。我认为,由于这显然是我无法以可预测的方式影响的比赛条件,所以如果我输了,我还不如重新参加比赛。
所以我将订阅行移动到 while
循环中,try
..catch
-es 它们并在 之后重试>Thread.Sleep()
。当两个订阅都成功或我连续输掉比赛超过 2 秒时,循环退出。
更重要的是,自从我实现更改以来,我还没有输过一次比赛。一个真正的 Heisenbug,如果我见过的话。
无论如何,我会坚持下去,直到我找到合适的解决方案或错误再次出现。
关于c# - VSIX 中令人讨厌的 COM 互操作问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6704776/
我正在尝试自定义 Visual Studio 2010 的起始页。我已从 Microsoft 下载了自定义起始页项目模板来执行此操作。 http://visualstudiogallery.msdn.
我正在为我的项目创建自定义测试运行器。所以我创建了一个可以在 Visual Studio 中注册的测试 vsix 项目。 我也知道我通过 F5 加载了扩展,然后加载了 Visual Studio 的实
标题说明了一切:如何“提取”一个 .vsix 文件? 我正在遵循教程并将其声明为步骤,但我不理解它并且它不容易用谷歌搜索。 最佳答案 将文件扩展名重命名为 .zip,瞧,就像普通的 zip 一样解压它
当用户安装我的扩展程序但未安装最新的 Visual Studio 更新时,扩展程序无法解析 Microsoft.CodeAnalysis.CSharp.dll 带有以下消息: Could not lo
我已经通过 Code Refactoring (CodeRefactoringProvider) roslyn 项目创建了一个具有一些不错的重构功能的 Visual Studio 扩展,但是在添加工具
说明 我开发了一个 Visual Studio 扩展(VSPackage),它向 Visual Studio 添加了一个新的项目类型(使用 CPS Project System)。我还向 VSPack
我正在为我公司的 MVC 4 应用程序创建自定义 VSTemplate,它使用的向导与创建新 MVC4 应用程序时出现的向导相当。我有两个模板之一,我想在开发人员创建此类新应用时应用,如下所示: 这两
我需要 issgin CTRL+F12 和 CTRL+G 此代码不起作用 但是这段代码有效 为什么不工作? 如何分配 CTRL+F12 和 CTRL+G? 最佳答案 使用代码设置绑
我有安装了 SP1 的 VS2010。我仍然没有在“新建项目”对话框中获得 VSIX 项目模板。 我也提到了以下问题,但没有运气 Can't find VSIX Project Type in VS
我正在尝试创建一个 Visual Studio 2017 扩展,只是为了好玩并了解 VS 扩展性的工作原理。 我的扩展必须可以从“解决方案资源管理器”选项卡中用作上下文菜单按钮,但我想将它包含在非根菜
我刚刚在我的计算机上安装了 VS 2013 SDK,它在 VisualStudio 2013 ultimate 旁边运行 Windows 7。 所以我在“添加项目”对话框中列出了所有可扩展性项目模板。
我已经创建了一个 ItemTemplate 项目。我想将其安装到自定义文件夹中。当我手动将从项目构建的 zip 文件添加到 ItemTemplates 中我命名的文件夹时,这工作正常。 我现在使用两个
我在 visual studio 2019 中下载了扩展,但在安装时出现错误。 安装日志是这样的: 4/25/2021 8:41:33 PM - Microsoft VSIX Installer
我最近下载了Visual Studio 2012的主题,文件以.vsix结尾。我在Internet上进行了检查,但是找不到程序名称Vsix Installer。有人可以告诉我如何安装.vsix文件吗?
我尝试在 Visual Studio 2017 社区离线安装 objc-syntax-highlighting.vsix。我无法解决它。我从 https://github.com/Microsoft/
是否可以在 VSIX 容器中包含一些预定义的文件,然后通过扩展访问它们? 最佳答案 在 .vsixmanifest 设计器中选择 Assets - New - Select type and file
我正在编写一个 VSIX 项目,我希望代码能够确定更新是否可用。 我知道 Visual Studio 能够检查更新,但是,我希望扩展能够更详细地提示用户(开发人员)。 我想知道如何让扩展从包 list
我已经为 Visual Studio 开发了一个 VSPackage。我遵循了这些演练中的所有说明: Part 1 - Creating a Basic Project System Part 2 -
由于 R# 不支持 Roslyn 早期预览版 C# 6.0 功能,因此代码看起来非常乏味... 我想使用分类器 VSIX 为代码着色。是否可以从 Roslyn 语言服务获取当前文档的语义模型? 最佳答
安装 Visual Studio 2017 后,我可以在这个 Vs 包上工作一个月左右,直到第一次更新。现在,在我重建此 Visual Studio 包并尝试安装 VSIX 后,我收到一条消息,指出它
我是一名优秀的程序员,十分优秀!