У меня есть следующая процедураInvalidCastException объекта Activator.CreateInstance во время процедуры установки
private static IMyInterface OpenInstance(
string assemblyPath,
string classType,
string assemblyName,
out AppDomain domainInstall)
{
IMyInterface interface = null;
AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = assemblyPath;
domainInstall = AppDomain.CreateDomain("PathInstall", null, domaininfo);
ObjectHandle handleService = null;
try
{
handleService = Activator.CreateInstance(
domainInstall,
assemblyName,
classType,
true,
System.Reflection.BindingFlags.CreateInstance,
null,
new Object[] { assemblyName},
System.Globalization.CultureInfo.CurrentCulture,
null, null);
Object myobject = handleService.Unwrap();
interface = (IMyInterface)myobject ;
}
catch (Exception ex)
{
...
}
return interface ;
}
Эта процедура работает всегда хорошо, но когда она вызывается во время установки пользовательских действий.
Другими словами, если я называю мою процедуру OpenInstance (...) внутри моей установки (...) переопределение:
public override void Install(IDictionary stateServer)
Определено в моем монтажника расширенном классе:
[RunInstaller(true)]
public class SpheresServiceInstaller : Installer
Я получил исключение, когда я пытаюсь бросить мой развернутый объект нужного типа:
interface = (IMyInterface)myobject ;
Сведения об исключении:
- Тип: System.InvalidCastException
- Сообщение: Невозможно бросить прозрачный прокси типа 'IMyInterface'.
Я хотел бы понять, почему процедура работает всегда, но в этом конкретном случае.
Подробности
Я последовал шаг за шагом процедуры создания объекта, и все кажется прекрасным, объект хорошо создается с помощью процедуры Activator.CreateInstance.
Сборка, которая используется Activator.CreateInstance, уже существует в файловой системе.
Специфическое собрание 'assemblyName в исходном коде - это сервис окна, который только что был создан процедурой установки.