插件编译器结构?

时间:2010-09-24 17:13:01

标签: c# compilation structure

我正在制作一个模块化程序,它支持在插件目录中动态编译源文件。

我想要做的是加快加载时间,将编译后的程序集保存到单独的文件夹中。 当我的程序加载,并遇到要编译的源文件时,我希望它检查是否有已编译的程序集,并使用它如果源文件从那时起没有更改。如果更改了源文件,则重新编译并覆盖已保存的程序集。

我的问题是,跟踪哪个源文件属于哪个程序集是一种有效的方法,以及跟踪源文件自上次加载以来是否已更改的有效方法。

4 个答案:

答案 0 :(得分:3)

更改跟踪:保留源文件的MD5 / CRC哈希记录和记录上次修改日期,将两者关联起来以确定文件是否已更改。

至于source->汇编,我建议convention over configuration

答案 1 :(得分:1)

你为什么要这样做呢?任何打算使用C#为您编写插件的人都将知道如何使用Visual Studio并构建DLL。你最好定义一个DLL接口来代替插件使用。那么您就不必担心加载任何类型的时间。

如果应该从程序本身内部更改“插件”,那么您应该只在程序中更改插件时进行编译,而不是试图查看事情何时发生变化。

答案 2 :(得分:0)

保证这100%的唯一方法(我能想到的)是保留原始源文件的副本以及编译版本。然后你可以在原始文件和新文件之间进行文件比较,看看它们是否已经改变,如果是,则执行编译。

答案 3 :(得分:0)

  

我的问题是,跟踪哪个源文件属于哪个程序集是一种有效的方法,以及跟踪源文件自上次加载以来是否已更改的有效方法

一种方法是:

  1. 使用FileSystemWatcher跟踪文件更改
  2. 保留一个列表(或表)以维护源程序集文件关联。