Вот шаги, которые я выполнил и которые позволили мне успешно отладить сборку .NET, представленную как компонент COM:
Начните с создания библиотеки классов, содержащей класс, который будет представлен как объект 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 + DM ) и убедитесь, что символы загружены для сборки COM:
Теперь, если вы нажмете F11 , вы сможете перейти в класс COM для отладки.
Примечание: Вы также можете напрямую открыть файл .cs, содержащий класс Foo
, и напрямуюустановите точку останова там.Еще раз важно, чтобы символы загружались для сборки или когда вы устанавливали точку останова, Visual Studio сообщит вам, что эта точка останова не будет достигнута.