2010-04-13 110 views
12

背景:我想創建一個自定義的VB編譯器,延長了「原始」的編譯器,來處理我的自定義編譯時屬性。集成自定義編譯器與Visual Studio IDE

問題:在我創建自定義編譯器之後,我有一個可執行文件能夠通過標準命令行界面編譯VB代碼,如何將此編譯器與Visual Studio IDE集成? (例如按「compile」或「build」將使用我的編譯器而不是默認編譯器)。

編輯:(糾正我,如果我錯了)

從反應在這裏,我看到了這個問題有點令人震驚,所以我將進一步解釋我的需求和背景: .NET爲我們提供有一個稱爲屬性的偉大機制。就我所知,製作屬性將其預期行爲應用於屬性元素(程序集,模塊,類,方法等) - 必須反映屬性。所以這裏真正的技巧是在正確的位置反映和應用行爲。

讓我們序列化,例如:我們裝修類Serializable屬性。然後,我們將該類的一個實例傳遞給格式化程序的Serialize方法。格式化程序反映實例,檢查它是否具有Seri​​alizable屬性,並相應地執行操作。

現在,如果我們考察同步,旗,過時和CLSCompliant屬性,那麼真正的問題是:誰在他們身上體現?至少在某些情況下,它必須是編譯器(和/或IDE)。因此,如果我希望創建改變元素行爲的自定義屬性而不管任何特定的使用者,我必須擴展編譯器以在編譯時反思它們。

當然,這些並不是我個人的見解:本書「Applied .NET Attributes」提供了一個創建自定義屬性和自定義C#編譯器以在編譯時反映該屬性的完整示例(該示例用於實現「java-樣式檢查異常「)。

+1

真的嗎?你真的想這麼做嗎? – 2010-04-13 10:59:11

+3

爲什麼不呢?這並不是說「M.A.哈寧」試圖在他的領域之外做點什麼。 – AMissico 2010-04-13 11:04:27

+0

@ M.A。哈寧:我不會解釋。如果他們感到震驚,那麼他們不應該回答這個問題。正確? – AMissico 2010-04-13 11:47:47

回答

2

退房 「的MSBuild概述」 一http://msdn.microsoft.com/en-us/library/ms171452.aspx。 Visual Studio項目是MSBuild項目。我相信你所要做的只是做一些小的改變。我沒有爲編譯器做過,但編譯後我用ILMerge做了它,它工作的很好。無縫甚至可以調試合併的程序集。

3

退房「BuildAction的房產」和「地產CustomTool」在http://msdn.microsoft.com/en-us/library/0c6xyb66(VS.80).aspx

幾年前,我讀了有關創建自定義的編譯器,對其進行註冊,並設置這些屬性的優秀文章。我現在找不到這篇文章,但這應該讓你開始。

+1

+1,用於集成Mozilla MIDL編譯器。 – MSalters 2010-04-13 12:20:46

相關問題