C#DLL引用更改版本并变得不可加载(插件系统)

C#DLL引用更改版本并变得不可加载(插件系统),c#,plugins,C#,Plugins,我会尽量让这件事尽可能简单。我有一个相当简单的插件系统,遇到了问题 我有两个组件: Host.exe Plugin.dll Plugin.dll引用Host.exe(其中包含Plugin.dll实现和使用的接口和类) 在运行时,Host.exe通过反射加载Plugin.dll,效果非常好。Host.exe更新并获取新版本号时除外。然后,当我尝试加载Plugin.dll时,我得到一个错误,说找不到Host.exe(具有旧版本号) 这意味着每次Host.exe更改内部版本号时,我都必须重新生成所

我会尽量让这件事尽可能简单。我有一个相当简单的插件系统,遇到了问题

我有两个组件:

  • Host.exe
  • Plugin.dll
Plugin.dll引用Host.exe(其中包含Plugin.dll实现和使用的接口和类)

在运行时,Host.exe通过反射加载Plugin.dll,效果非常好。Host.exe更新并获取新版本号时除外。然后,当我尝试加载Plugin.dll时,我得到一个错误,说找不到Host.exe(具有旧版本号)

这意味着每次Host.exe更改内部版本号时,我都必须重新生成所有插件


有人找到了解决方案吗?

尝试将从Host.exe引用的接口移动到单独的DLL中,例如PluginSupport.DLL,改为使用Plugin.dll引用。

使用绑定重定向将App.config文件添加到主机项目,该重定向将主机程序集的所有版本重定向到当前版本。

有一个简单的解决方案,不要更改[AssemblyVersion],只更改[AssemblyFileVersion]。为了使其有意义,最好将插件和主机都需要的类移动到单独的程序集中


现在,当您在其中一个类中进行重大更改时,您可以更改[AssemblyVersion]以强制重新编译插件。现在这是一件好事,而不是一个问题。

加载程序集时使用的限定名称是什么?版本号应该是可选的,对吗?