【问题标题】:Is it possible to monitor changes in an internal class?是否可以监控内部类的变化?
【发布时间】:2015-04-29 06:31:45
【问题描述】:

我正在使用 CSScript 在运行时将 C# 文件作为脚本加载。这些脚本继承自宿主应用程序内的类。为了更快地加载,我正在缓存脚本,或者更确切地说是已编译的程序集,如果它们比脚本文件更新,则加载它们。

现在,如果宿主应用程序中的方法发生变化,脚本自然必须重新编译,否则会出现异常,因为子应用程序中的调用不再匹配父应用程序。但我不想每次重新编译应用程序时都重新编译每个脚本,因为大多数时候更改与脚本基类无关。

是否可以在运行时(反射?)期间创建基类中的方法、方法和参数的一种“快照”,以便能够判断什么时候发生了变化,所以我知道我有重新编译脚本?

【问题讨论】:

  • 您可以在第一次出现不是由用户代码而是由不兼容的程序集创建的异常时重新编译。 (不知道是否清晰可辨,例如TargetInvocationException
  • @Samuel Hm,我猜这可能行得通。

标签: c# .net scripting


【解决方案1】:

计算脚本文件的哈希值并在加载时进行比较。如果哈希值发生了变化,那么脚本文件已经被修改了。

https://support.microsoft.com/en-gb/kb/307020

【讨论】:

  • 问题不是脚本被修改,而是宿主应用程序中的基类。
  • 不确定 CSScript 是如何工作的,但如果脚本引用宿主应用程序中的接口,您是否必须重新编译脚本?当然只有当它自己的接口没有被修改时。您还可以为主机程序集创建哈希值或依赖版本号。
猜你喜欢
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多