C# System.Runtime.Remoting.RemotingException调用外部程序集的方法
我第一次玩反射和远程处理。我在机器上有一个程序集,我对它的源代码有只读访问权限,我想直接调用它的一个方法。这是我的代码:C# System.Runtime.Remoting.RemotingException调用外部程序集的方法,c#,reflection,remoting,C#,Reflection,Remoting,我第一次玩反射和远程处理。我在机器上有一个程序集,我对它的源代码有只读访问权限,我想直接调用它的一个方法。这是我的代码: AppDomain NewDomain = AppDomain.CreateDomain("NewDomain"); try { var objectHandle = NewDomain.CreateInstanceFrom(@"C:\Program Files (x86)\xxx\ExistingAss
AppDomain NewDomain = AppDomain.CreateDomain("NewDomain");
try
{
var objectHandle = NewDomain.CreateInstanceFrom(@"C:\Program Files (x86)\xxx\ExistingAssembly.dll", "RemoteNamespace.RemoteClass");
var localObject = (RemoteNamespace.ISharedInterface)objectHandle.Unwrap();
File.Copy(localObject.StrTargetMethod(arg1),
Path.Combine(logDir, logfile), true);
}
finally
{
AppDomain.Unload(NewDomain);
}
在try
块的第一行,CreateInstanceFrom
方法抛出一个未处理的异常:System.Runtime.Remoting.RemotingException:无法加载类型“RemoteNamespace.RemoteClass,RemoteNamespace,Version=1.2.0.8,Culture=neutral,PublicKeyToken=xxxxxxxxx”
编辑:我现在正在尝试:
var assembly = Assembly.LoadFrom(@"C:\Program Files (x86)\xxx\ExistingAssembly.dll");
var localObject = (ISharedInterface)assembly.CreateInstance("RemoteNamespace.RemoteClass");
但是我在assembly.CreateInstance()
上遇到了相同的错误。我将assembly.GetTypes()
记录到屏幕上,因此我知道程序集正在正确加载,并且我要查找的类在打印的列表中
编辑2:在App.config中将程序集位置添加为
块后,使用Activator.CreateInstance(assembly.FullName,“RemoteNamespace.RemoteClass”)
工作。我不知道assembly.CreateInstance()
有什么问题。对于遇到此问题的任何其他人,App.config中需要的XML为:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="[AssemblyNameWithoutFileExtension]" publicKeyToken="[AssemblyPublicKeyToken]" culture="neutral" />
<codeBase version="[AssemblyVersionNumber]" href="file:///[FullAssemblyFilePath]" />
</dependentAssembly>
</assemblyBinding>
</runtime>