2017-02-08 12 views
1

필자는 내 문제를 집중적으로 다루는 베어 본 UWP 솔루션을 보유하고 있습니다. 디버그 모드에서 앱을 실행하면 잘 돌아갑니다. 릴리스 모드에서, 나는 다음과 같은 오류가 나타납니다 내 검색을 바탕으로릴리스 빌드에서 UWP - Reflection_InsufficientMetadata_EdbNeeded가 필요합니다.

Reflection_InsufficientMetadata_EdbNeeded

지금까지, 그것이 내 애플 반사를 사용하기 때문입니다 같은 것, 그리고 모드를 해제 .NET 기본을 사용을하는 스트립 컴파일러가 사용하지 않는 파일을 사용합니다. 내 Default.rd.xml 런타임 지시문 파일에 추가 할 올바른 조합을 찾을 수 없습니다.

app 샘플은 MyNumberEnum의 열거 형 값에 적용되는 사용자 지정 특성 (EnumStringValue)을 만들고 사용자가 주어진 문자열이 사용자 지정 특성 값으로 사용되는지 확인하도록 EnumHelper 클래스를가집니다.

는 사용자 정의와 열거 형 속성

:

namespace MyLibrary.Core.Models 
{ 
    public enum MyNumberEnum 
    { 
     Unknown = 0, 
     [EnumStringValue("ONE1")] 
     One = 1, 
     [EnumStringValue("TWO2")] 
     Two = 2, 
     [EnumStringValue("THREE3")] 
     Three = 3 
    } 
} 

사용자 정의 속성과 열거 도우미 :

:

namespace MyLibrary.Core 
{ 
    internal class EnumStringValueAttribute : Attribute 
    { 
     internal EnumStringValueAttribute(string rawValue) 
     { 
      this.RawValue = rawValue; 
     } 
     internal string RawValue { get; set; } 
    } 

    internal static class EnumHelper 
    { 
     internal static bool GetCustomAttribute<TEnum>(string value) where TEnum : struct 
     { 
      var fields = typeof(TEnum).GetRuntimeFields(); 
      foreach (var field in fields) 
      { 
       if (field.GetCustomAttributes(typeof(EnumStringValueAttribute), false).Any()) 
       { 
        string fieldRawValue = ((EnumStringValueAttribute)field.GetCustomAttributes(typeof(EnumStringValueAttribute), false).First()).RawValue; 
        if (fieldRawValue == value) 
        { 
         return true; 
        } 
       } 
      } 
      return false; 
     } 
    } 
} 

EnumHelper 같은 라이브러리에서 UWPIssueDemo 클래스의 생성자에서 호출

namespace MyLibrary 
{ 
    public class UWPIssueDemo 
    { 
     public UWPIssueDemo() 
     { 
      if (!EnumHelper.GetCustomAttribute<MyNumberEnum>("ONE1")) 
      { 
       throw new IOException("Couldn't find ONE1 (this is unexpected)"); 
      } 
     } 
    } 
} 

디버그 모드에서 문제없이 실행됩니다. 내 Default.rd.xml 파일에 다음 줄을 추가 시도했다, 그러나 어떤 다른 보지 않았다

if (field.GetCustomAttributes(typeof(EnumStringValueAttribute), false).Any()) 

: 릴리스 모드 (Reflection_InsufficientMetadata_EdbNeeded) 위의 스크린 샷에서 예외가 EnumHelper의 다음 줄에서 발생에서 동작 :

<Assembly Name="MyLibrary" Dynamic="Required All"/> 
<Type Name="MyLibrary.Core.EnumStringValueAttribute" Dynamic="All" Browse="All" Serialize="All"/> 

릴리스 모드에서이 응용 프로그램을 실행하려면 무엇을 Default.rd.xml 파일에 추가해야합니까?

또한이 샘플의 압축 솔루션을 https://www.dropbox.com/s/dm3wi3oburvdn1o/UWPIssue.zip?dl=0에 업로드했습니다.

답변

0

올바른 해결책은 아니지만 EnumStringValueAttribute 클래스 및 생성자의 공개를 내부에서 공용으로 업데이트하면 응용 프로그램을 실행할 수 있습니다.

public class EnumStringValueAttribute : Attribute 
{ 
    public EnumStringValueAttribute(string rawValue) 
    { 
     this.RawValue = rawValue; 
    } 
    internal string RawValue { get; set; } 
} 

Default.rd.xml 파일에서 다른 조합을 시도해도 실패했습니다.