我找不到任何loadFromRemoteSources
在代码中启用的方法,如果有,我怀疑它是否允许您在创建应用程序域后将其应用到应用程序域。但我可能是错的!
您可以改为使用“ CAS 策略的更多隐式使用:loadFromRemoteSources ”中描述的技术。他们建议创建一个新的应用程序域PermissionState.Unrestricted
,并将远程程序集加载到那里。NotSupportedException
当您尝试加载远程程序集时,不会抛出以这种方式创建的应用程序域。
他们将这种技术描述为当您只想加载完全信任的一些远程程序集,因此不想loadFromRemoteSources
在您的 app.config 中启用时的解决方案。您可以使用相同的技术,但将整个程序加载到新的应用程序域中。
这是一个示例程序,它在执行时会立即创建一个新的应用程序域PermissionState.Unrestricted
并在其中运行:
public class Program : MarshalByRefObject
{
public Program()
{
Console.WriteLine("Program is running.");
Assembly remoteAssembly = Assembly.LoadFrom(
@"\\server\MyRemoteAssembly.dll");
IAddIn addIn = (IAddIn)remoteAssembly.CreateInstance("MyAddIn");
addIn.Initialize();
}
static void Main()
{
// This program needs to run in an application domain with
// PermissionState.Unrestricted, so that remote assemblies can be loaded
// with full trust. Instantiate Program in a new application domain.
PermissionSet permissionSet =
new PermissionSet(PermissionState.Unrestricted);
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase =
AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
AppDomain appDomain = AppDomain.CreateDomain(
"Trusted Domain", null, setup, permissionSet);
appDomain.CreateInstance(
Assembly.GetExecutingAssembly().FullName, "Program");
}
}
public interface IAddIn
{
void Initialize();
}
这是MyRemoteAssembly.dll的源代码,您可以将其放在网络共享中:
public class MyAddIn : IAddIn
{
public void Initialize()
{
Console.WriteLine("Hello from a remote assembly!");
Console.ReadLine();
}
}