2013-01-16 4 views
4

방금 ​​MonoTouch 솔루션에서 ServiceStack.Text.MonoTouch.dll을 사용하기 시작했습니다. 모든 것이 컴파일되고 시뮬레이터에서 실행되지만 전화에서 디버그 빌드를 실행하자마자 컴파일 프로세스가 다음 오류와 함께 종료됩니다. 오류 MT3001 : 어셈블리 '.../ServiceStack.Text. MonoTouch.dll 'MonoTouch 디버그가 ServiceStack.Text (AOT 오류)로 빌드되지 않습니까?

이 읽은 것은 ServiceStack.Text dll이 너무 커서 또는 그 행을 따르는 것 때문입니다. 그래서 내가 릴리스 모드에서 일을하고 LLVM에있는 'Link SDK assembly only (링크 SDK 어셈블리 만)'로 링커를 돌리기 때문에 모든 일들이 작동합니다.

지금은 장치에서 디버깅 할 수 없으므로 문제가 있습니다. 디버그 모드에서는 링커가 비활성화되고 LLVM이 해제됩니다. 이 주위에 어떤 방법이 있습니까?

MT 6.0.8 ServiceStack dll의 최신 버전은 Github입니다.

답변

1

In debug mode the linker is disabled,

아니요 (적어도 기본적으로 아님).

기본적으로 모든 장치 빌드 (디버그 또는 릴리스)에 대해 관리되는 링커가 활성화됩니다 (SDK 링크). 그러나 기본값 (Link SDK)은 ServiceStack.Text.dll에서 사용되지 않는 코드를 제거 할 수 없으므로 해당 어셈블리는 어셈블리가 아니기 때문에 제거해야합니다.

옵션을 으로 전환해야합니다. 모든 어셈블리를 연결하여이 처리되도록하십시오.

링커가 아닌 경우 (예 : 리플렉션 사용) [Preserve] 속성 (또는 --linkskip=ASSEMBLY)을 자체 코드에 추가해야 할 수도 있습니다. 예를 들어 thread을 참조하십시오.

+0

디버거에서 링커 모드를 '모든 어셈블리 링크'로 변경하려고했지만 AOT 오류가 계속 발생합니다. – Dylan

+0

질문을 편집하고 AOT 오류를 추가하십시오 (유사한 경우에 표시되는 다른 질문과 다를 수 있음). ** 전체 ** 빌드 로그도 도움이 될 수 있지만 질문에 포함하기에는 너무 큰 것 같습니다. – poupou

+0

내가 추가 한 오류가 추가되었습니다. MT3001이 무엇을 의미하는지 확실하지 않은가요? 그냥 디버그 모드에서 어떻게하는지 이상합니다. – Dylan