2010-11-22 15 views
3

有誰知道爲什麼裝飾主要方法的屬性的構造函數是在調試版本中調用的,而不是在發佈版本中調用的?
我如何確保在發佈版本中調用構造函數?當然沒有手動調用它。裝飾主要方法的屬性構造函數不會在發佈版本中調用

任何有關這個問題的見解將非常感激。

+0

而究竟有你這樣的結論來呢,請不要告訴我你試圖調試它時優化對... – leppie 2010-11-22 11:03:17

+0

沒有代碼,想不到任何東西,請張貼一些東西:) – TalentTuner 2010-11-22 11:03:54

+0

@leppie - 他的結論沒有錯 – 2010-11-22 11:22:47

回答

2

當通過IDE「」通過下面的「調試」=>「啓用Visual Studio託管過程」選項啓用時,我可以重現此(在調試和發佈中),。在命令行中,它將打印出「hello」,其中 - 通過IDE打印「world」。它看起來像IDE正在對屬性做一些不同的思考。

這是不是預期的行爲,你不應該依賴這種行爲。如果你想要執行一些特定的代碼:顯式調用所需的代碼。要獲得可預測的行爲,禁用調試」 =>‘啓用在Visual Studio宿主進程’選項。

using System; 
public class MyTestAttribute : Attribute { 
    public MyTestAttribute() { 
     Program.text = "world"; 
    } 
} 
class Program { 
    public static string text = "hello"; 
    [MyTest] 
    static void Main() { 
     Console.WriteLine(text); 
     Console.ReadKey(); 
    } 
} 
+0

我不知道這是不是預期的行爲,因爲STAThread屬性裝飾了主要的方法,謝謝你的確認,重新考慮設計...;) – NullAndVoid 2010-11-22 12:02:23

+1

@NullAndVoid - 屬性是gen通常*標記*,而不是預期採取主動滾動。我希望*它實際上是'STAThread',它正在尋找,但是在那裏 - 作爲核心CLR可能用'Attribute.IsDefined'來檢查,也許VS主進程調用'GetAttributes'(強制實現),然後* *過濾看看是否有[[STAThread]]。 – 2010-11-22 12:06:58

相關問題