繁体   English   中英

我应该依赖动态加载的程序集吗?

[英]Should I rely on dynamically loaded assemblies?

我有以下情况。

  • 程序集D包含类Data
  • 程序集F1包含类,它创建,填充和返回Data
  • 程序集F2包含类,它接受Data作为输入。

诀窍是,所有这些程序集都是插件并动态加载。 当然,F1和F2都引用D,但在运行时,所有三个都由主机应用程序加载。

现在如果有人用更新的版本替换D二进制文件会有什么变化呢?

我写了一个测试应用程序,它做了类似的事情,结果如下:

  • 在类Data中添加新字段不会导致异常;
  • 用另一个字段替换现有字段会导致TargetInvocationException包含信息,请求字段不存在

如果.NET跟踪接口调用,我很好。 那是因为访问库中未更改的部分只会起作用,如果该部分发生变化,我只会告诉我一个例外。 因此它将工作(在接口级别上)或不工作 - 没有未定义的行为。

我的问题:

  • 如何在运行时解析类型 - 特别是在不匹配的程序集版本的情况下? .NET是否跟踪字段/属性/参数/返回值类型和名称?
  • 有没有办法在某些特定版本中强制引用程序集?

第二个问题:在Visual Studio中,有一种简单的方法可以强制您的应用程序使用特定版本的引用程序集。 只需单击引用下的程序集,然后查看属性。 有一个名为“特定版本”的属性。 如果将其设置为true并在运行时加载另一个,则会出现异常。

您的第一个问题:我不确切知道.Net何时能够使用程序集确定它是否未编译。 因此,如果类/接口的签名发生更改,.Net将抛出异常。 我认为如果新程序集中类/接口中的方法/属性具有修改的签名,.Net只会尝试使用新程序集并抛出异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM