2010-11-22 3 views
3

주 메소드를 장식하는 속성의 생성자가 디버그 빌드에서는 호출되지만 릴리스 빌드에서는 호출되지 않는 이유를 아는 사람이 있습니까?
릴리스 빌드에서 생성자가 호출되도록하려면 어떻게해야합니까? 물론 수동으로 호출하지 않고.기본 빌드를 장식하는 속성의 생성자가 릴리즈 빌드에서 호출되지 않음

이 주제에 대한 통찰력은 대단히 감사하겠습니다.

+0

그리고 정확히 어떻게이 결론에 도달? 그리고 당신은 최적화가 때를 디버깅하려고 말해 해달라고하십시오이를 에 .... – leppie

+0

코드가 없으면 뭔가 생각할 수 없으니 먹을 것을 게시하십시오 :) – TalentTuner

+0

@leppie - 결론이 잘못되었습니다. –

답변

2

IDE에서 "디버그"=> "Visual Studio 호스팅 프로세스 사용"옵션이 활성화 된 상태에서 아래에서 디버그 및 릴리스 ()를 재현 할 수 있습니다. 명령 줄에서 "hello"를 인쇄합니다. IDE에서는 "world"를 인쇄합니다. IDE가 속성에 대한 다른 반영을하고있는 것처럼 보입니다.

하지 예상되는 동작이며,이 동작에 의존해서는 안된다. 특정 코드를 실행하려면 원하는 코드를 명시 적으로 호출하십시오. 예측 가능한 행동을 얻으려면, 디버그 "=>"프로세스 "옵션을 호스팅하는 비주얼 스튜디오를 사용하지 않도록 설정합니다.

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

+1

@NullAndVoid - 속성은 gen입니다. erally * 마커 *를 사용하는 것이 좋습니다. 예상 한 것은 실제로는'STAThread'이지만, 핵심 CLR은'Attribute.IsDefined'로 검사 할 수 있습니다. VS 호스트 프로세스가'GetAttributes' (materialization을 강제 실행) 및 *를 호출 할 수 있습니다. *'[STAThread]'가 거기에 있는지보기 위해 필터링. –

관련 문제