2017-02-17 5 views
2

ich diesen XAML-Code in einer Xamarin bin schrieb bildet app (Multi-Plattform):müssen Montage Namen ändern in Xamarin bildet App

<?xml version="1.0" encoding="utf-8" ?> 
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:MyNameSpace;assembly=MyAssemblyName" 
      Padding="0,20,0,0"> 

<TabbedPage.Children> 

    <local:Page1 /> 
    <local:Page2 /> 
... 

MyNameSpace der Namespace ist i an der Projekterstellung wählen müssen, und MyAssemblyName ist die Projektname.

Seite1 und Seite2 sind andere XAML/cs Seiten

Dies funktioniert nicht. Ich hatte Fehler in der Xamarin-Vorschau und bei der Ausführung. Diese Fehler sagten, dass mein Assemblyname nicht gefunden wurde oder so ähnlich.

Ich habe Optionen in iOS und Android Teilprojekt überprüft. Diese Optionen wurden bei der Erstellung automatisch generiert.

Ich sehe, dass die Montagenamen sind: MyAssemblyName.iOS und MyAssemblyName.Droid ich beide MyAssemblyName umbenannt und mein Projekt arbeitet

Meine Fragen sind:

  • Ist es eine gute Sache Haben Sie den gleichen Assemblynamen für iOS- und Android-Projekt?

  • Warum funktionieren diese Tags nicht mit Standardnamen für Assemblys?

Dank

+0

Wenn Sie mit einem Formularprojekt arbeiten, möchten Sie möglichst viel Code teilen und innerhalb des PCL-Namespace. Um zum Beispiel benutzerdefinierte Steuerelemente zu laden, würden Sie sie in der PCL erstellen und auf die Assembly als etwas wie MyProject.MyCustomControlFolder.PCL verweisen. Ich kann mir kein Szenario vorstellen, in dem Sie plattformspezifische Namespaces in Ihrem XAML in einem Formularprojekt referenzieren möchten. Die plattformspezifische UI-Arbeit in Formularen wird in der Regel über benutzerdefinierte Renderings ausgeführt. –

+0

Also meinst du das Umbenennen wie ich es tat, ist die beste Lösung? – Bob5421

+0

Nein. Ich meine, nicht plattformspezifisch (Droid/IOS/Win) in Ihrem XAML zu referenzieren ist die beste Lösung. –

Antwort

4

Sie sind wahrscheinlich in einem "Shared Project". Wenn dies der Fall ist, hat jede Plattform, die Sie in Ihrer Lösung haben, eine Assembly, aber das Shared Project (das Sie den größten Teil des Codes schreiben) nicht.

Die Lösung für diesen Fehler besteht darin, einfach den assembly=MyAssemblyName aus dem xmlns:local String zu entfernen. Es sollte xmlns:local="clr-namespace:MyNameSpace;" sein

+0

Es funktioniert nicht. In der Tat eine erstellte plattformübergreifende App, als ich das Projekt erstellte. Wenn Sie über PCL sprechen, müssen Sie eine leere Lösung erstellen und dann eine PCL-Bibliothek hinzufügen? Das ist nicht das Gleiche? Hast du individuelle Projekte für iOS und Android hinzugefügt? In welchen Fällen sollte ich mit Forms Apps gehen und in welchen Fällen sollte ich mit pcl gehen? Danke – Bob5421

+0

Wenn Sie eine Xamarin.Forms App erstellen, müssen Sie zwischen dem freigegebenen Projekt und dem PCL-Projekt wählen. Ja, Sie können beide Typen später in der Lösung hinzufügen, aber ich denke, dass es bei diesem Problem nicht relevant ist. Nein, die Projekte wurden mit der gesamten Lösung erstellt. Und zur letzten Frage gibt es eine Debatte über PCL vs. Shared. Persönlich finde ich Shared-Projekt viel besser zu programmieren, ohne eine Reihe von Schnittstellen zu schreiben, um nativen Code aufzurufen, sondern stattdessen Compiler-Direktiven zu verwenden. Zurück zu Ihrem Fehler, verwende ich diese Art von xmlns sehr oft ohne Probleme. –

+0

Überprüfen Sie die Namespaces von 'Page1' und' Page2', da der Ordnername dem Namespace hinzugefügt wird, wenn sie sich in einem anderen Ordner befinden (z. B. 'MyNamespace.Folder.Page1'). In diesem Fall müssen Sie die lokalen xmlns als 'xmlns: local =" clr-namespace: MyNameSpace.Folder "' hinzufügen. –

Verwandte Themen