2010-09-24 136 views
1

我正在製作一個模塊化程序,它支持插件目錄中源文件的動態編譯。插件編譯器結構?

我想要做的事情,加快加載時間,是編譯彙編到一個單獨的文件夾。 當我的程序加載,並遇到源文件進行編譯時,我希望它檢查是否有已編譯的程序集,並使用它如果源文件自以來沒有更改過。如果源文件已更改,則重新編譯並覆蓋保存的程序集。

我的問題是,跟蹤哪個源文件屬於哪個程序集,以及跟蹤上次加載後源文件是否發生更改的有效方法是什麼?

回答

3

更改跟蹤:保留源文件的MD5/CRC哈希記錄&上次修改日期,將兩者關聯以確定文件是否已更改。

至於source-> assembly,我建議convention over configuration

+0

注意:比利ONeal是正確的,你的方法可能有缺陷。你應該使用.NET的普通插件設計,但我想我會直接回答你的問題。 – Aren 2010-09-24 17:17:21

+1

該類型的應用IM發展的將不會與一個普通的.Net插件設計正常工作..我沒有問批評這個問題。我問了這個問題,因爲我需要爲這種情況做一些具體的工作,需要一些見解。 – caesay 2010-09-24 17:26:54

+0

@Tommy:你是被批評的原因是因爲你所要求的並沒有太大的意義。當某些事情沒有多大意義時,會有人回答你,提出針對問題的備選解決方案,以避免您詢問的原始問題。但是,如果你[拒絕考慮替代解決方案,而是抨擊那些花時間爲你寫信的人](http://blogs.msdn.com/b/oldnewthing/archive/2010/07/28/10043237 .aspx),你會受到批評。 – 2010-09-24 17:44:26

0

保證這個100%的唯一方法(我能想到的)是保留原始源文件的副本以及編譯版本。然後,您可以在原始文件和新文件之間進行文件比較,以查看它們是否已更改,如果是,請執行編譯。

+0

您究竟會如何進行這樣的比較? – 2010-09-24 17:16:15

+0

或保持哈希!詳情請參閱我的回答。 – Aren 2010-09-24 17:16:29

+0

downvote是怎麼回事?一個簡單的二進制比較可以完美地工作,並且快速地搖擺。 – jvenema 2010-09-24 17:20:21

1

你爲什麼要這麼做?任何將要使用C#爲您編寫插件的人都將知道如何使用Visual Studio並構建DLL。你最好定義一個DLL接口來代替插件。那麼你不必擔心任何類型的加載時間。

如果「插件」應該從您的程序本身中更改,那麼您應該在程序中更改插件時進行編譯,而不是試圖查看何時發生更改。

+0

我有一個非常動態的插件系統,不適合做大量的插件編輯,重新加載插件,重新編譯插件等,而且更容易編輯源文件並單擊按鈕而不是打開VS並重新編譯。 – caesay 2010-09-24 17:19:11

+0

@Tommy:Err ...你正在編輯VS之外的插件嗎?爲什麼?如果只是點擊一個按鈕,爲什麼不僅在點擊按鈕時重新編譯(這是我答案中的第二段)? – 2010-09-24 17:20:17

+0

我的程序是部分自動化的,它會重新加載事件,並且我想盡可能快地完成。因此只在需要時重新編譯。 – caesay 2010-09-24 17:25:34

0

我想問你的是,這將是一種有效的方法,來跟蹤其源文件屬於哪個組件,以及跟蹤是否一個源文件已經自去年負載被更改或不

的有效途徑

的一種方式可能是:

  1. 使用FileSystemWatcher跟蹤文件更改
  2. 保持一個列表(或表),以保持源組件文件關聯。