2015-12-14 42 views
4

有誰知道是否有可能使用CSharpCompilation的extensionmethod散發出發射組件時指定框架-版本?指定Framework版本CSharpCompilation.Emit

我們需要爲目標4.5.1顯然否則我們得到了一個討厭的運行時錯誤:

MissingMethodException 
Method not found: '!!0[] System.Array.Empty()'. 

還是必須等到客戶端升級到4.6框架之前,我們可以利用羅斯林的?

+2

FWIW:如果你需要說服你的客戶更新,微軟是在2016年1月12日,放棄對4.5.1的支持:http://blogs.msdn.com/b/dotnet/archive/2015/12/09 /support-ending-for-the-net-framework-4-4-5-and-4-5-1.aspx – JoshVarty

+0

@JoshVarty這確實是一些重要的信息。我很高興你寫了這個,我們完全監督了來自MS的這個公告。 **編輯**如果這聽起來很諷刺,它不應該。 – CSharpie

+0

@CSharpie,你是什麼意思的「目標」? 4.x框架都針對4.0運行時。什麼代碼拋出異常並且不拋出4.52,4.6或4.6.1? –

回答

4

編譯器不會(和從來沒有)了的「Framework版本」的概念。所有的編譯器都明白是包含了哪些引用。這聽起來像是在創建4.6版本框架的引用(可能是因爲您正在使用運行的彙編位置,並且正在4.6上運行)。

相反,您需要確保已安裝4.5.1定位包(VS安裝會自動執行此操作,但其他機器可能沒有),並將其參考編號從C:\Program Files (x86)\Reference Assemblies中加入。

如果它存在於所引用的組件,但是,如果它不具有後備邏輯編譯器將發出到Array.Empty引用。

+0

我有點期待這樣的答案,但我無法自己弄清楚。非常感謝。所以我需要包括C引用了:\程序文件(x86)\參考大會\微軟\框架\ .NETFramework \ V4.5.1 以前我一直做的typeof(對象).Assembly.Location。 – CSharpie