2010-04-07 46 views
3

我会尽量保持这一点尽可能简单。我有一个相当简单的插件系统已经遇到了问题。C#DLL参考更改版本,并成为可卸载(插件系统)

我有2个组件:

  • Host.exe
  • Plugin.dll

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

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

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

任何人都有解决这个问题吗?

+0

您用来加载程序集的合格名称是什么?版本号应该是可选的,对吗? – harpo 2010-04-07 15:51:02

回答

2

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

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

2

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

1

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