Я не человек C #, но вот пример, который я конвертировал из VB.net. Обратите внимание, я должен был убедиться, что у меня было одно пространство имен на уровне проекта, а затем этот класс в проектах VB. Я понимаю, что в C # Projects все иначе.
[ComClass(MyClass.ClassId, MyClass.InterfaceId, MyClass.EventsId)]
public class MyClass {
// These GUIDs provide the COM identity for this class
// and its COM interfaces. If you change them, existing
// clients will no longer be able to access the class.
public const string ClassId = "f58411e1-1689-4bf3-a0e1-b49f479e28ba";
public const string InterfaceId = "f4a575c6-62d2-44eb-af0f-f5b2bb65ad51";
public const string EventsId = "ad56e4f9-3512-4233-aae4-7d1c2457c08f";
// A creatable COM class must have a Public Sub New()
// with no parameters, otherwise, the class will not be
// registered in the COM registry and cannot be created
// via CreateObject.
public SalePayStatus() : base()
{
}
}
Если меня беспокоит COM, я всегда сначала проверяю реестр, чтобы убедиться, что соответствующие записи созданы. Я обнаружил, что управление версиями и установкой MSI вызывает проблемы, особенно удаление (не очищает реестр) или переустановку, а MSI с COM-объектами .net, который перезаписывает существующую запись COM, вызывает все виды неприятностей.
Обычно я обнаруживаю, что вам нужно быть осторожным с библиотеками .net x64 vs x32 build. Например, вам, возможно, придется явно ссылаться на C: \ Windows \ SysWow64 \ или C: \ Windows \ System32 \ editions механизма VBS.
Наконец, если вы используете VBS на веб-сайте ASP на сервере x64 с компонентом COM .net x32, вам необходимо убедиться, что расширенный параметр пула приложений IIS 7 «32-битное приложение» правильно установлен на значение «Истина / Ложь».