以下是我执行的步骤,这些步骤使我能够成功调试作为 COM 组件公开的 .NET 程序集:
首先创建一个包含将作为 COM 对象公开的类的类库:
namespace COMTest
{
using System;
using System.Runtime.InteropServices;
public interface IFoo
{
void Bar();
}
[ComVisible(true)]
public class Foo : IFoo
{
public void Bar()
{
Console.WriteLine("Bar");
}
}
}
使用强密钥对程序集进行签名并注册为 COM 对象:
regasm.exe /codebase COMTest.dll
注册 COM 对象后,您可以在新的 Visual Studio 实例中创建一个新的控制台应用程序来测试 COM 对象:
class Program
{
static void Main()
{
var type = Type.GetTypeFromProgID("COMTest.Foo");
var instance = Activator.CreateInstance(type);
type.InvokeMember("Bar", BindingFlags.InvokeMethod, null, instance, new object[0]);
}
}
在该行上放置一个断点InvokeMember
并运行应用程序。一旦断点被击中,打开模块窗口( Ctrl+D M) 并确保为 COM 程序集加载了符号:
现在,如果您按下F11,您可以进入 COM 类进行调试。
备注:也可以直接打开包含Foo
该类的.cs文件,直接在该处下断点。再一次重要的是为程序集加载符号,或者当你放置断点时,Visual Studio 会告诉你这个断点不会被命中。