2013-02-11 3 views
1

구성 파일에서 읽은 값을 기반으로 조건부로 조립품 레벨 속성을 설정하고 싶습니다. 가능한가?조립식 레벨 속성을 조건부로 설정하십시오.

그 속성은 정적 메타 데이터이므로 런타임에 데이터 자체를 변경할 수는 있지만 응용 프로그램을 시작한 후에는 변경 사항이 적용되지 않습니다.

다른 대안에는 어떤 것이 있습니까?

업데이트

내 목적 : 나는 모든 방법의 시작 및 종료 지점을 추적하는 TraceAttribute을 사용하고

할 노력하고 무엇. 구성 파일에서 값을 기반으로 어셈블리 수준에서이 특성을 설정하거나 해제하고 싶습니다. 나는 대부분의 시간에 그것을 가지고 싶지만 특정 환경에서 문제의 증거를 수집하는 비상 사태시에만 켜고 싶습니다.

+0

일부 구성 값을 기반으로 특성을 설정하려는 이유를 설명하십시오. 달성하려는 목표는 무엇입니까? –

+0

목표가 포함되도록 내 질문을 업데이트했습니다. –

답변

2

프로젝트 구성 레벨에서 TRACE 변수를 정의 사용해보십시오 : 당신을 왜 아직 확실하지 않다 Can attributes be added dynamically in C#?

어셈블리 레벨 속성과 구성 키를 바인딩해야하지만 구성 키를 속성의 생성자/속성에 전달하고 속성 논리 내에서 값을 확인할 수 있습니다. 그것은 보이는 것 같은 :

[assembly: Trace("DoTracing")] 

그리고 설정 파일 : 기존 속성을 사용하는 경우 다른 솔루션으로

<appSettings> 
    <add key="DoTracing" value="true"/> 
</appSettings> 

, 당신은 사용자 정의 할 수있는 어셈블리 정보에 다음

[AttributeUsage(AttributeTargets.Assembly)] 
public class TraceAttribute : Attribute 
{ 
    public TraceAttribute(string traceConfigKey) 
    { 
     var keyValue = ConfigurationManager.AppSettings[traceConfigKey]; 

     DoTracing = !string.IsNullOrEmpty(keyValue) && bool.Parse(keyValue); 
    } 

    /// <summary> 
    /// Use this property for your tracing conditional logic. 
    /// </summary> 
    public bool DoTracing { get; private set; } 
} 

프로젝트 속성에 조건부 컴파일 기호를 추가 한 다음 쓸 수도 있습니다.

#if TRACE 
[assembly: Trace()] 
#endif 

하지만 프로젝트 재 컴파일이 필요합니다.

+0

깔끔하네요! 자, 왜 내가 그걸 생각하지 않았어? –

0

#ifdef TRACE 
[TraceAttribute()] 
#endif 
MethodBeingTraced() 
{ 
} 

내가 그것을보다 자세한 내용은 여기 답이라고 생각

관련 문제