2016-10-03 3 views
0

나는 현재 자 마린의 복사본을 마스터 분기, 그것을 컴파일 양식 다운로드 후 나는 테스트 프로젝트에 대한 참조로이 컴파일 된 어셈블리를 추가 :소스에서 Xamarin Forms를 컴파일하고 어셈블리를 사용하는 방법은 무엇입니까?

  • Xamarin.Forms.Core
  • Xamarin.Forms.Platform
  • 는 Xamarin.Forms.Xaml

테스트 프로젝트는 Visual Studio 자 마린 양식 프로젝트 템플릿을 사용하여 만든

  • 을 Xamarin.Forms.Platform.Android 내가 수정 한 유일한 것은 Core.csproj와 Android.csproj에서 컴파일 된 어셈블리를 가리키는 참조입니다.

    Xamarin.Forms.Platform.Android 프로젝트의 bin \ debug \ 폴더에서 처음 3 개를, Xamarin.Forms.Xaml bin \ debug 폴더에서 마지막 3 개를 사용했습니다.

    테스트 프로젝트를 실행하고 정상적으로 실행되면 기본 생성 코드 "Xamarin Forms에 오신 것을 환영합니다!"에서 레이블을 볼 수 있습니다. 요소 유형 Xamarin.Forms이 아닌 :

    System.ArgumentException 내가 응용 프로그램을 실행하면

    public partial class App : Application 
    { 
        public App() 
        { 
         InitializeComponent(); 
    
         MainPage = new NavigationPage(new ContentPage()); 
        } 
    } 
    

    , 그것은 나에게 오류를 제공합니다

    다음으로, 난 그냥이 같은 MainPage 수정 .View

    매개 변수 이름 : 요소

    t 이 행에 hrow :

     void IVisualElementRenderer.SetElement(VisualElement element) 
         { 
          if (!(element is TElement)) 
           throw new ArgumentException("element is not of type " + typeof(TElement), nameof(element)); 
    
          SetElement((TElement)element); 
         } 
    

    이상한입니다.

    요소의 유형은 Xamarin.Forms.NavigationPage하고 스택 추적

    enter image description here

    누군가가 컴파일 된 어셈블리와 테스트 프로젝트를 실행 도와 줄 수있다?

    업데이트 # 1 :

    호출 스택의 두번째 항목이가 NavigationPage 요소에 대한 등록 렌더러 (NavigationPageRenderer)를 얻을 수 아니라고 보여줍니다 대신에 기본 렌더러 (DefaultRenderer)를 만드는 것하는 요소의 유형 (NavigationPage)을 처리 할 수 ​​없으므로 예외가 발생합니다.

    따라서 NavigationPage의 경우 Registrar에 해당 렌더러 (NavigationPageRenderer)가 없습니다.

    public static IVisualElementRenderer CreateRenderer(VisualElement element) 
        { 
         UpdateGlobalContext(element); 
    
         IVisualElementRenderer renderer = Registrar.Registered.GetHandler<IVisualElementRenderer>(element.GetType()) ?? new DefaultRenderer(); 
         renderer.SetElement(element); 
    
         return renderer; 
        } 
    

    내 느낌은 자 마린 양식을 구축 할 때 약 내가 잘 모르는 것 같아요 빌드 단계가있을 수 있습니다.

  • +0

    그런 다음 어떤 유형입니까? 어떤 OS를 구축하고 있습니까? NuGet의 Xamarin.Forms를 사용하면 코드가 작동합니까? – Cheesebaron

    +0

    @Cheesebaron 질문에 대한 답변을 편집했습니다. diff를 참조하십시오. – JamesL

    +0

    저는 Windows 10을 사용 중이며 XAmarin Forms 프로젝트 템플릿 (Android 4.0.3)과 동일한 Android 버전을 타겟팅하고 있습니다. 나는 설정에서 아무것도 변경하지 않았다. 코드는 Nuget의 Xamarin.Forms에서 제대로 작동합니다. – JamesL

    답변

    0

    Forms.Page (즉, ContentPage 등)에서 파생되지 않는 항목에 InitializeComponent를 호출하면 충돌이 발생합니다.

    응용 프로그램 자체는 페이지가 있다면, 이런 식으로 뭔가 보일 것 클래스 뒤에 일부 XAML을 가지고 'MyCustomPage'을 불러올 수, 페이지되지 않습니다 : 앱 생성자에서 다음

    public partial class MyCustomPage : ContentPage 
    { 
        public MyCustomPage() 
        { 
        InitializeComponent(); 
        // Some other setup... 
        } 
    } 
    

    당신 앱의 루트에서 빈 컨텐츠 페이지를 생성하기 때문에

    MainPage = new MyCustomPage(); 
    

    를 부를 것이다, 당신의 InitializeComponent를 호출 할 필요가 없습니다.

    희망이 도움이됩니다.

    0

    당신은 또한 당신의 안드로이드 프로젝트에서

    Xamarin.Forms.Platform.Android (Forwarders) 
    

    을 참조 할 필요가있다.

    +0

    그냥 실행했습니다. 이 문제에 대한 자신의 문제가 해결되었습니다. –

    관련 문제