У меня есть следующая процедура
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 (...) внутри моего собственного переопределения Install (...):
public override void Install(IDictionary stateServer)
Определено в моем расширенном классе установщика:
[RunInstaller(true)]
public class SpheresServiceInstaller : Installer
У меня возникла исключительная ситуация, когда я пытаюсь привести развернутый объект к нужному типу:
interface = (IMyInterface)myobject ;
Сведения об исключении:
- Тип : System.InvalidCastException
- Сообщение : Невозможно привести прозрачный прокси к типу 'IMyInterface'.
Я хотел бы понять, почему процедура работает когда-либо, но в этом конкретном случае.
Детали
Я шаг за шагом следовал процедуре создания объекта, и все выглядит нормально, объект хорошо создан процедурой Activator.CreateInstance.
Сборка, используемая Activator.CreateInstance, уже существует в файловой системе.
Конкретная сборка 'assemblyName в исходном коде) - это оконная служба, которая была только что создана процедурой установки.