我正在编写一个使用插件的应用程序。插件是位于插件目录中的类库。我的应用程序通过LoadFrom加载这些库。其中一些具有库的形式的依赖关系,它们位于相同的插件目录中。当我尝试通过Activator.CreateInstance从其中一个插件创建类的实例时,我收到一个异常'无法找到程序集'(这是插件的依赖程序集),但是这个程序集已经加载(!)和插件,它是在ProcessExplorer中可见。 我无法理解我的麻烦。
答案 0 :(得分:5)
您的问题可能是,de loaded程序集与请求版本不同。 .Net运行时将它们的名称和它们的版本之后的程序集映射到名称等于和版本差异,如果加载另一个,则会得到异常,即“无法找到程序集”或类似的东西。问题是,组件无法正确匹配。但有一个解决方案:
请查看MSDN以获取有关该问题的更多信息。
如果您处理插件,我建议您实施该活动, 所以你可以记录那个AppDomain的所有程序集请求。
您将找到有关运行时行为和装配加载的更多信息here
希望我能提供帮助,请向我们提供有关您的解决方案的反馈意见!
答案 1 :(得分:1)
您应该提供程序集文件的完整路径。
class Program
{
static void Main(string[] args)
{
var asmFileName = "test.dll"; // Your plug-in file name
var asmPath = AppDomain.CurrentDomain.BaseDirectory; // Your assemblies's root folder
var asmFullPath = System.IO.Path.Combine(asmPath, asmFileName);
var asm = System.Reflection.Assembly.LoadFrom(asmFullPath);
}
}
答案 2 :(得分:0)
我有类似的问题,他们通常通过改变项目属性中的目标框架来解决......