У меня есть две сборки .NET, которые зарегистрированы как компоненты COM +, и я тестирую их из обычного тестового набора консольного приложения;
Dim objFirst As New MyFirstComponent() 'COM+ initialisation
Dim RC As Boolean = objFirst.GetValue()
Вызов метода выполнен успешно. Это определение MyFirstComponent;
<ProgId("MyFirstComponent")> _
<Guid("...")> _
<ClassInterface(ClassInterfaceType.None)> _
<Transaction(TransactionOption.Supported)> _
Public Class MyFirstComponent
Inherits ServicedComponent
Implements IMyFirstComponent
Public Function GetValue() As Boolean Implements IMyFirstComponent.GetValue
Dim objSecond As New MySecondComponent() 'COM+ initialisation
Dim RC As Boolean = objSecond.GetValue()
Return RC
End Function
End Class
В момент инициализации MySecondComponent я получаю исключение RemotingException со следующим сообщением;
Невозможно загрузить тип 'MySecondComponent', ..., Version = ..., Culture = нейтральный, PublicKeyToken = ... '
Все сборки также строго названы. Я не могу понять, почему я могу успешно запустить вызов метода для первого компонента, но когда он пытается впоследствии загрузить сам второй компонент, он не может разрешить тип.
В качестве идентификатора, если я запускаю код из тела "GetValue ()" в моем тестовом жгуте, он выполняется как ожидалось. Кажется, что проблема возникает только после того, как вещи переместились в сферу компонентов COM +, вызывая другие компоненты COM +.
Обновление
Я думаю, что сейчас сужаю проблему. Похоже, что COM + сохранял что-то в процессе, и мне пришлось вручную завершать работу приложений COM + из окна Component Services, прежде чем запускать на нем свой клиент. Раньше проблема была в том, что я тестировал клиент каждый раз, когда менял что-то (например, добавлял сборку в GAC), и по какой-то причине COM + все еще считал, что сборка не может быть найдена. Завершение работы приложения, добавление необходимых сборок в GAC и запуск клиента снова работает, как и ожидалось.
Это было хорошо для моего небольшого доказательства концепции клиента. Поэтому я вернулся к своему реальному коду и опробовал его, но теперь у меня появляется другая странная проблема. Мои приложения COM + сейчас не могут найти свои обычные ссылки на проекты. Я действительно не хочу идти по пути добавления ВСЕГО, что они ссылаются на GAC, поэтому я сейчас пытаюсь понять, почему мои обычные ссылки, не относящиеся к COM +, не разрешаются.