C# 反序列化对象(dll类)
我的dll文件有问题。我正在写一个可以用插件扩展的程序。我为这些插件使用一个接口,我可以在我的程序中读取和使用它们。每个插件都包含一个可序列化的类,其中包含一些简单的字段。 我可以用二进制格式化程序序列化这些类并将它们保存到磁盘。但是,当我尝试反序列化保存的文件时,我得到一个异常:“程序集……找不到” 我必须在哪里注册我的dll插件,这样我的程序才能找到程序集C# 反序列化对象(dll类),c#,serialization,plugins,dll,C#,Serialization,Plugins,Dll,我的dll文件有问题。我正在写一个可以用插件扩展的程序。我为这些插件使用一个接口,我可以在我的程序中读取和使用它们。每个插件都包含一个可序列化的类,其中包含一些简单的字段。 我可以用二进制格式化程序序列化这些类并将它们保存到磁盘。但是,当我尝试反序列化保存的文件时,我得到一个异常:“程序集……找不到” 我必须在哪里注册我的dll插件,这样我的程序才能找到程序集 谢谢你的帮助 确保插件dll及其所有依赖项位于同一目录(或GAC)中。首先,我强烈建议使用for plugin,它是.NET 4.0的一
谢谢你的帮助 确保插件dll及其所有依赖项位于同一目录(或GAC)中。首先,我强烈建议使用for plugin,它是.NET 4.0的一部分 另一方面,DLL是从bin文件夹加载的。如果你把它们放在别的地方就找不到了。现在,如果您仍然坚持在bin中有一个“plugin”子文件夹,那么您可以在启动时使用
Assembly.LoadFile
查看此处,手动加载程序集
在我的例子中,执行程序集和插件程序集在同一个文件夹中,但抛出异常“程序集…找不到”
我下课写的
internal class FromLoadedAssemblyBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
Assembly assembly = Assembly.Load(assemblyName);
return assembly.GetType(typeName);
}
}
和使用
_binaryFormatter = new BinaryFormatter();
_binaryFormatter.Binder = new FromLoadedAssemblyBinder();
代码很简单,但在我的项目中效果很好。您好。当我的dll文件保存到bin文件夹时,可以找到程序集。但是我们必须为插件使用一个特殊的文件夹。我也尝试了“Assembly.LoadFrom()”,但没有效果。我得到了一个Assembly对象,它告诉我许多不同的事情,比如其他接口,但是binaryformatter仍然不知道程序集:(
Assembly.LoadFrom
可以工作,但问题是DLL可能有依赖项,您可能还必须将依赖项放在插件文件夹中。