我正在制作一个模块化程序,它支持插件目录中源文件的动态编译。插件编译器结构?
我想要做的事情,加快加载时间,是编译汇编到一个单独的文件夹。 当我的程序加载,并遇到源文件进行编译时,我希望它检查是否有已编译的程序集,并使用它如果源文件自以来没有更改过。如果源文件已更改,则重新编译并覆盖保存的程序集。
我的问题是,跟踪哪个源文件属于哪个程序集,以及跟踪上次加载后源文件是否发生更改的有效方法是什么?
我正在制作一个模块化程序,它支持插件目录中源文件的动态编译。插件编译器结构?
我想要做的事情,加快加载时间,是编译汇编到一个单独的文件夹。 当我的程序加载,并遇到源文件进行编译时,我希望它检查是否有已编译的程序集,并使用它如果源文件自以来没有更改过。如果源文件已更改,则重新编译并覆盖保存的程序集。
我的问题是,跟踪哪个源文件属于哪个程序集,以及跟踪上次加载后源文件是否发生更改的有效方法是什么?
更改跟踪:保留源文件的MD5/CRC哈希记录&上次修改日期,将两者关联以确定文件是否已更改。
至于source-> assembly,我建议convention over configuration。
你为什么要这么做?任何将要使用C#为您编写插件的人都将知道如何使用Visual Studio并构建DLL。你最好定义一个DLL接口来代替插件。那么你不必担心任何类型的加载时间。
如果“插件”应该从您的程序本身中更改,那么您应该在程序中更改插件时进行编译,而不是试图查看何时发生更改。
的有效途径我想问你的是,这将是一种有效的方法,来跟踪其源文件属于哪个组件,以及跟踪是否一个源文件已经自去年负载被更改或不
的一种方式可能是:
FileSystemWatcher
跟踪文件更改
注意:比利ONeal是正确的,你的方法可能有缺陷。你应该使用.NET的普通插件设计,但我想我会直接回答你的问题。 – Aren 2010-09-24 17:17:21
该类型的应用IM发展的将不会与一个普通的.Net插件设计正常工作..我没有问批评这个问题。我问了这个问题,因为我需要为这种情况做一些具体的工作,需要一些见解。 – caesay 2010-09-24 17:26:54
@Tommy:你是被批评的原因是因为你所要求的并没有太大的意义。当某些事情没有多大意义时,会有人回答你,提出针对问题的备选解决方案,以避免您询问的原始问题。但是,如果你[拒绝考虑替代解决方案,而是抨击那些花时间为你写信的人](http://blogs.msdn.com/b/oldnewthing/archive/2010/07/28/10043237 .aspx),你会受到批评。 – 2010-09-24 17:44:26