注册 COM 互操作始终在 Visual Studio 2012 中运行

Posted

技术标签:

【中文标题】注册 COM 互操作始终在 Visual Studio 2012 中运行【英文标题】:Register for COM Interop Always Runs in Visual Studio 2012 【发布时间】:2012-10-01 03:02:10 【问题描述】:

我有一个解决方案,其中包含多个已选中 Register for COM Interop 的项目。

我有一个引用生成的 TLB 的 Visual Basic 6 项目。 VB6 的一个问题是当它引用 dll/tlb 时,它会锁定该文件。

使用 Visual Studio 2010,除非我正在重建或对其中一个互操作项目进行了更改,否则我可以构建/运行解决方案(在 VB6 项目打开的情况下),而不会发出一个或多个程序集已锁定。

但是,使用 Visual Studio 2012,即使是在没有任何改变的简单构建中,显然它总是会进行 regasm,这使我无法调试我的 VB6 项目。

Visual Studio 的这个在构建时运行 regasm 的新功能是我可以关闭的吗?

编辑:请允许我简化一下:

使用 Visual Studio 2010,我点击 Build-->Build Solution 并检查我的一个程序集的输出,该程序集标记为 Register for COM Interop 并且文件没有更改。 使用 Visual Studio 2012,我执行 Build-->Build Solution 并检查相同的程序集,它已更新,并且每次点击 Build Solution 时都会更新。

我希望 Visual Studio 2012 中的行为与 2010 年一样。

编辑(再次): 我将此发布到Microsoft Connect。如果有人在那里回答或发布解决方法,我会敦促他们也在这里发布答案。

【问题讨论】:

我觉得这很奇怪,因为 VB6 总是锁定文件。如果我打开了一个引用 2010 项目的 VB6 应用程序,我将无法重新编译我的 VS2010 项目 @MattWilko:正如我所说,在 VS2010 中,如果我要重建,我无法保持 VB6 处于打开状态,但如果它只是 build,它有效。 您是否尝试在他们的Connect 站点上将此作为错误报告给 Microsoft? @HolisticDeveloper:谢谢。我认为这就是我必须接受的地方。 也许您可以创建一个单独的构建目标(如 DEBUG),其中不构建互操作程序集? 【参考方案1】:

我在运行 VB6 和 VS20XX 时总是遇到这样的问题,但我总是进行重建。我的建议是停止使用 VB6 进行测试。我发现简单地创建一个测试项目并在 .NET 中对我的 .NET 代码进行所有测试要容易得多。这应该只需要少量设置,但在我看来这是非常值得的。

我知道这不是您特定问题的答案,但它提供了替代方案。就您所描述的问题而言,我无法复制行为的变化。我一开始只打开 VS201X,重新构建完整的解决方案,打开 VB6 并添加对公开 COM DLL 的引用。我没有注意到任何意外。

    只要我没有更改 COM DLL 中的任何内容,构建就可以正常工作 如果我在文件被锁定时更改了 COM DLL 的代码,则构建失败 由于文件被锁定,重建失败

【讨论】:

感谢您的建议。不幸的是,不使用 VB6 进行调试不是问题,因为 C# 代码和 VB6 代码之间存在相互依赖关系——不一定是循环引用,而是更加省略。我更新了我的问题以(希望)澄清根本问题/问题是什么。

以上是关于注册 COM 互操作始终在 Visual Studio 2012 中运行的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 64 位 COM 互操作问题

如何在 Visual Studio 2012 中创建 HelloWorld COM 互操作

Visual Studio 2010,TlbImp 在 2.0 项目中生成 .net 4.0 互操作

如何在vb6中注册一个不能用作com互操作的.net DLL?

使用 C#/托管代码为免注册 COM 互操作设置 DLL

在 C++ 中使用 COM 互操作对象