C#DLL引用更改版本并变为可卸载(插件系统)

时间:2010-04-07 15:49:24

标签: c# plugins

我会尽量保持这一点。我有一个相当简单的插件系统,遇到了问题。

我有2个集会:

  • Host.exe
  • Plugin.dll

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

在运行时,Host.exe通过反射加载Plugin.dll,效果很好。除Host.exe更新并获取新版本号外。然后,当我尝试加载Plugin.dll时出现错误,说无法找到Host.exe(带有旧版本号)。

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

任何人都有解决方案吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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