2013-03-21 100 views
0

我試着反編譯C#控制檯應用程序並在Visual C#2010中重新編譯它,但代碼中有很多錯誤。這裏是一個例子:.net Reflector反編譯C#代碼不會編譯

public static Test mTest 
    { 
     [CompilerGenerated] 
     get 
     { 
      return <mTest>k__BackingField; 
     } 
     [CompilerGenerated] 
     set 
     { 
      <mTest>k__BackingField = value; 
     } 
    } 

我已經將.net框架版本設置爲3.5在.net反射器。有什麼辦法可以獲得能夠從.net Reflector重新編譯的代碼嗎?

+5

' k__BackingField'是編譯器生成的內部字段名稱,它們不能用作源代碼中的字段名稱 – 2013-03-21 18:51:24

+0

您使用的是什麼版本的Resharper?目前的版本理解這一點,並將其變成一個自動支撐 – 2013-03-21 18:57:30

+0

好吧,我試過了......你說得對,就像反射器中的一個bug。實例屬性很好 - 但靜態的還在添加後臺字段。唯一能夠解決這個問題的方法就是通過代碼來代替getter和setter與{get;組; }或將後臺字段重命名爲有效的c#字段名稱。 – 2013-03-22 00:20:59

回答

3

沒有直接的方法可以克服這個限制。編譯器從您的源代碼創建IL,並且此IL可能不是包含有關您的初始源代碼的信息。例如,當你寫

public string Property { get; set; } 

編譯器(例如<Property >k__BackingField)並將其命名爲使用特殊符號,你不能用它來命名在源代碼中你的領域建立支持字段。你給出了上面的例子,反射器試圖推導出編譯器的含義。

我已使用dotPeek(JetBrains提供的免費反編譯器),它可以理解autoproperties,因此您會在示例中看到正確的代碼。但是,再次 - 有些情況下,dotPeek將無法獲得最初的源代碼。

+1

有什麼方法可以修復代碼並使其正確編譯? – user2196536 2013-03-21 18:58:58

+0

@ user2196536你應該使用'public static Test mTest {get;組;這個領域 – 2014-10-26 18:34:01