是否可以將IL代碼插入到C#方法中?如何將CIL代碼插入到C#
15
A
回答
5
3
如果內嵌IL(由C和C++編譯器支持內聯彙編的同樣的精神)是你要找的是什麼,這可以用編譯後的往返編譯來實現。
邁克失速曾經寫a tool for that,據我知道這是相當成熟:比
其他,你可以使用支持內嵌IL F#。
2
您需要的工具叫做Cecil,它是Mono項目的一部分。
你可以得到關於它在這裏的更多信息:http://www.mono-project.com/Cecil
從上面的網站引用:
塞西爾是JB Evain(http://evain.net/blog/)編寫的庫,產生和檢查的程序和庫ECMA CIL格式。它全面支持泛型,並支持一些調試符號格式。
用簡單的英語,用Cecil,您可以加載現有的託管程序集,瀏覽所有包含的類型,實時修改它們並將修改後的程序集保存到磁盤。
2
DynamicMethod是在運行時完成此操作的輕量級方法。
Microsoft C#編譯器不支持在編譯時注入IL,但代碼編織工具可以作爲後編譯步驟。
9
我只是posted a utility它允許使用自定義屬性將整個C#函數體自動地用內聯IL替換。與類似的實用程序類似,這可以通過ILDASM/ILASM往返來實現,可以將其設置爲構建後步驟。該工具還會調整PDB,以便在調試器中保留單步執行和設置單個IL指令的斷點。這是不同之處在於,其他一些往返IL排滑輪鞋的它(只)可替代全功能的機構,就像這樣:
class MyClass
{
[ILFunc(@"
.locals init ([0] int32 i_arg)
ldc.i4.3
ret
")]
int MyFunc(int i_arg)
{
return 3;
}
};
對於高績效的關鍵方法,我嘗試使用DynamicMethod
以在反編譯提高生成的IL,但發現由於委託調用開銷而損失了好處。如果沒有運行時自定義,那麼內聯IL給出了手動調整IL的好處,而不是那種命中,假設您確實需要DynamicMethod
。
相關問題
- 1. 如何將javascript代碼插入到colorbox?
- 2. 如何在C++中插入python代碼?
- 3. 如何將一個jQuery插件插入到PHP代碼中?
- 4. 如何將JavaScript代碼插入Jupyter
- 5. .NET CIL代碼大小
- 6. 更改CIL代碼爲本地代碼在C#
- 7. 如何插入HTML代碼到表
- 8. 如何插入此代碼到AsynTask
- 9. 插入javascript代碼中的c#代碼
- 10. 如何將任何文本插入到使用C#代碼的任何網站?
- 11. Xcode 4自動代碼完成 - 如何將NO插入代碼
- 12. 在cil代碼中獲得'ldftn'函數指針,在cil代碼中使用ldftn'
- 13. 將一段異步代碼插入到C++函數中
- 14. 有沒有辦法將彙編代碼插入到C?
- 15. 如何將PHP代碼插入到WordPress自定義字段
- 16. 如何將jquery代碼插入到html中?
- 17. 如何將LESS mixin插入到JavaScript代碼中
- 18. 如何通過代碼將組合框插入到winform中?
- 19. 有沒有辦法將C++代碼編譯爲Microsoft .Net CIL(字節碼)?
- 20. 如何將DataBinding內聯代碼放入內聯C#代碼中?
- 21. 如何將Razor C#代碼嵌入到.js文件中?
- 22. 如何編寫將C++代碼作爲輸入的C++代碼生成器?
- 23. 如何插入html代碼MediumEditor?
- 24. 如何在html中插入html代碼
- 25. 插入asp.net代碼
- 26. Netbeans插入代碼
- 27. 如何使用c#代碼向nvarchar插入新行
- 28. 如何將C#代碼轉換爲C++
- 29. 使用jQuery將Javascript代碼插入DIV
- 30. 將javascript代碼插入會議文件
沒有找到你的lib任何ILFunc屬性。 – Denis 2016-08-14 15:49:27
@Denis我不認爲我提供了一個庫。它是源代碼,並且網頁上有兩個文件。第二個(向下滾動到附加文本之外)包含ILFunc'Attribute'本身的定義。 – 2017-02-01 21:50:08
真是太棒了!謝謝! – Thought 2017-11-18 23:50:09