Вызов локального компонента.NET (2) COM+ из приложения C#
Я создал компонент.NET 2 COM+, который будет использоваться нашим классическим веб-сайтом ASP. Это делается довольно просто в классическом ASP...
Dim MenuManager : Set MenuManager = Server.CreateObject("MenuManager.MenuManager")
Однако я хочу профилировать производительность компонента с помощью консольного приложения C#.
Как мне вызвать это из консольного приложения C#?
2 ответа
Вы используете позднее связывание с функцией CreateObject(). Вы хотите украсть, попросить или одолжить копию VS2010, чтобы использовать динамическое ключевое слово C# 4.0, чтобы сделать это легко. Вот аналогичный код, который работает на любой машине. Для создания COM-компонента FileSystemObject используется поздняя привязка, первые две строки эквивалентны вашему фрагменту кода. В нем перечислены подкаталоги папки c:\windows:
using System;
class Program {
static void Main(string[] args) {
var type = Type.GetTypeFromProgID("Scripting.FileSystemObject");
dynamic obj = Activator.CreateInstance(type);
dynamic win = obj.GetFolder("c:/windows");
foreach (dynamic subwin in win.SubFolders) {
Console.WriteLine(subwin.Name);
}
Console.ReadLine();
}
}
Если вы не можете использовать C# версии 4, подумайте об использовании VB.NET. Он имеет такой же синтаксис, а также имеет функцию CreateObject().
Чтобы вызвать COM-объект с собственным кодом из C#, выберите "Добавить ссылку", затем выберите вкладку "COM" и используйте ее, чтобы добавить ссылку в библиотеку типов вашего COM-объекта. Это запустит TLBIMP для импорта вашей библиотеки типов и генерации хорошего набора оболочек и типов для COM-объекта. Затем вы просто используете эти типы и оболочки для создания экземпляра вашего COM-объекта и вызова его методов.
Это не будет работать для COM-объектов, реализованных с использованием управляемого кода. Инструмент TLBIMP замечает, что библиотека типов была сгенерирована из управляемого кода, и отказывается импортировать ее. Вместо этого предлагается просто добавить ссылку.NET на сборку.
Вы можете собрать набор оберток COM вручную, как описано здесь. Но это кажется огромной работой, когда вы можете использовать гораздо более простое решение, предложенное @Hans