2014-06-23 4 views
3

일부 Microsoft OWIN 구성 요소에서 Mono 3.4.0을 사용하려고합니다. 나는 Windows에서 테스트를 시작했습니다,하지만 내 응용 프로그램이 HTTP 요청을 처리 할 때, 나는 다음과 같은 예외 얻을 :TypeLoadException from Mono

System.TypeLoadException : 어셈블리에서 유형 'Microsoft.Owin.Security.AuthenticateResult'를로드 할 수 없습니다 '마이크로 소프트 .Owin, 버전 = 2.1.0.0, 문화 = 중립, PublicKeyToken = 31bf3856ad364e35 '.

응용 프로그램이 Visual Studio를 표준 .NET 어셈블리로 사용하여 Mono 런타임에서 실행되어야한다는 기대하에 컴파일되고 있습니다.

내가 콘솔 응용 프로그램에 Microsoft.Owin NuGet 패키지를 추가하고 다음 코드로 문제를 재현하는 관리 :

class Program 
{ 
    static void Main(string[] args) 
    { 
     var instance = new AuthenticateResult(
      null, 
      new AuthenticationProperties(), 
      new AuthenticationDescription()); 

     Console.WriteLine(instance.GetType().AssemblyQualifiedName); 
    } 
} 

.NET이 실행, 응용 프로그램의 형식 정보에서 정상적으로 인쇄 시작 . Mono를 통해 실행되는 경우 응용 프로그램에서 예외를 인쇄하고 실패합니다.

또한,이 코드는 .NET 및 모노 모두에서 작동 : 나는 비슷한 결과로 Microsoft.Owin 어셈블리에서 유형의 숫자, 테스트 한

class Program 
{ 
    static void Main(string[] args) 
    { 
     var type = typeof(AuthenticateResult); 
     Console.WriteLine(type.AssemblyQualifiedName); 
    } 
} 

. 필요하기 전에 typeof 연산자를 사용하여 유형을로드하면 Mono는 예외를 발생시키지 않고 대신 다른 유형 (아마도 다음 코드 만 필요함)을로드하려고 시도하는 예외를 던집니다.

왜 모노에서 실행할 때이 이상한 동작이 발생합니까? .NET CLR에서 기대하는대로 어셈블리를로드하기 위해 명령 줄에 지정해야하는 것이 있습니까? 왜 유형을로드하지 못한 이유에 대한 추가 정보를 얻기 위해 할 수있는 일이 있습니까?

답변

3

유형로드 오류는 코드에서 참조하는 유형에 사용 된 유형 중 하나가 사용 된 것으로 보이며 실제로 사용하는 유형은 아닙니다.

당신이 당신의 프로그램을 실행하기 전에 set MONO_LOG_LEVEL=debug을 실행하면, 당신은 당신의 출력에 다음이 표시됩니다

모노 : 클래스 System.Security.Claims.ClaimsIdentity이 mscorlib에에서 사용되는로드 , 수 없습니다, 버전 = 4.0.0.0, 문화 = 중립, 우리는 System.Security.Claims 네임 스페이스의 어느 것도 아직 모노에서 구현되지 않은 볼 수 있습니다 mono status page에 대해이 확인 PublicKeyToken = b77a5c561934e089

.

+0

관련 항목 : [ClaimsIdentity System.Security.Claims in Mono] (http://stackoverflow.com/questions/21101170/claimsidentity-system-security-claims-in-mono). [이 GitHub 스레드] (https : //)를 가리키는 질문에 [주석] (http://stackoverflow.com/questions/21101170/claimsidentity-system-security-claims-in-mono#comment33473563_21101170)이 있습니다. github.com/NancyFx/Nancy/issues/1190)에서 Mono 구현에 대해 알아보십시오. –

+0

어디에서 MONO_LOG_LEVEL 변수를 설정합니까? XCODE에? 터미널에? – CthulhuJon