C# 即使基类程序集丢失,继承的类也可以工作

C# 即使基类程序集丢失,继承的类也可以工作,c#,.net,clr,C#,.net,Clr,对不起,我说得含糊不清,因为这是一个与工作中的某些知识产权限制相关的问题 我在一个程序集中有一个类(程序集a),它继承了另一个程序集(程序集B)中的泛型基类。这个基类有一个静态方法,用作继承类实现的“应用程序”的入口点 静态方法在程序集B中实现。有一个可插入的应用程序在运行时反射地启动程序集a的内容。当我运行这个应用程序时,程序集A似乎可以正常工作一段时间,但当它找不到程序集B时就会崩溃。部件B当前在机器上的任何位置都不可用 执行顺序: 启动器应用程序通过命令行启动,DLL包含文件路径引用的程序

对不起,我说得含糊不清,因为这是一个与工作中的某些知识产权限制相关的问题

我在一个程序集中有一个类(程序集a),它继承了另一个程序集(程序集B)中的泛型基类。这个基类有一个静态方法,用作继承类实现的“应用程序”的入口点

静态方法在程序集B中实现。有一个可插入的应用程序在运行时反射地启动程序集a的内容。当我运行这个应用程序时,程序集A似乎可以正常工作一段时间,但当它找不到程序集B时就会崩溃。部件B当前在机器上的任何位置都不可用

执行顺序:

  • 启动器应用程序通过命令行启动,DLL包含文件路径引用的程序集
  • 启动器应用程序反射性地查找在程序集B中实现的神奇静态方法,即使它只能访问程序集A。(在计算机上找不到程序集B。没有GAC,没有文件。)
  • 静态方法在短时间内有效(并成功地使用程序集B中的其他类型)
  • 当启动器的执行最终遇到程序集B中找不到的类型时,将引发异常

  • 我不明白的是,互联网也没有告诉我(大量的搜索),当最初执行的代码在程序集B中实现时,程序集A在一段时间内是如何工作的。NET编译器(或者可能是Roslyn,因为我在VS2015中使用它)做了什么从组件B中包括组件A,使其能够运行一段时间?这是决定性的吗?这是怎么回事?

    你的描述也很模糊,所以我几乎无法发表评论。关于这样一个程序如何运行,您可以很容易地挖掘MSIL并进行实时调试。发布一些代码也可能有帮助。只是不要让每个读者都猜到发生了什么。你只是在见证即时编译器的即时行为。它要求及时装配。很难看出,既然您知道这一点,您将如何做不同的事情。@HansPassant我知道CLR在运行时执行JIT编译。我的意思是,它的执行远远超出了我在没有程序集B的情况下的预期,因为在崩溃之前一直在运行的代码是在程序集B中实现的。我预计缺失的程序集异常基本上会立即发生,但是它仍然能够执行一段时间。那些从程序集B中成功使用的类型,它们是如何使用的?导致异常被使用的类型是什么?它与其他类型有什么区别?程序集是如何编译的,使用了哪些编译器选项?