2015-12-01 7 views
9

Ich versuche, eine Klassenbibliothek zu erstellen, die gemeinsamen Objekte enthalten wird (hauptsächlich DTOs) einen WebAPI (mit ASP.NET 5) und einem verzehr UWP App. Ich habe jedoch noch nicht herausgefunden, wie man die Klassenbibliothek so erstellt, dass sie von beiden anderen Projekten referenziert werden kann.Referenz einer Klassenbibliothek von UWP und ASP.NET 5

Was ich bisher versucht:
Zuerst habe ich versucht, eine Class Library (Package), die unter Web gefunden werden kann. Diese Art der Bibliothek aus dem ASP.NET-Projekt ohne Probleme angesprochen werden, aber wenn es aus dem UWP-Projekt zu verweisen versuche, erhalte ich die folgende Meldung:

A reference to 'ClassLibrary1' could not be added. 

Als nächstes habe ich versucht, eine -Klassenbibliothek (Windows universelle), die unter Fenster> universal- gefunden werden kann. Dies kann leicht Referenzen aus dem UWP-Projekt sein, aber wenn es von ASP.NET zu verweisen versuche, erhalte ich:

The following projects are not supported as references : 

    - The project ClassLibrary2 has a target framework that is incompatible or has version higher than the current project and cannot be referenced. 

Also: Wie kann ich eine Klassenbibliothek erstellen, die sowohl in einer ASP.NET verwendet werden können, 5 Projekt und ein UWP-Projekt?

Antwort

7

Was Sie brauchen, ist eine Portable Klassenbibliothek (unter Windows).

PCL

Da Sie nur sind Targeting ASP.NET 5 und Windows 10, um die Plattformen auf diese beiden nur zu begrenzen, aber es gibt keine „Fehler“ in mehr Plattformen unterstützt (es kann begrenzen, wie viel von die geteilte API ist jedoch verfügbar).

PCL 2

+0

Dank, das funktioniert groß, solange die ASP.NET 5 zielt nur auf "dnxcore50" (was auf lange Sicht mein Ziel ist). Wenn ich aber auch 'dnx451' adressiere, erhalte ich Fehler wie' Der Typ 'IEnumerable ' existiert sowohl in 'mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' als auch 'System.Runtime, Version = 4.0 .20.0, Kultur = neutral, PublicKeyToken = b03f5f7f11d50a3a '\t '- was kann ich dagegen tun? –

+1

Es ist offensichtlich [ein bekanntes Problem] (https://github.com/dotnet/coreclr/issues/1228) mit mehreren Versionen von einigen Typen, an denen sie arbeiten. Sie könnten versuchen, die Referenzen in project.json wie im Problem zu suchen. – Bart

3

Die .Net Standard class library sollte die tragbare Klassenbibliothek von als Nachfolger gedacht werden. Beide zielen darauf ab, das Teilen von Code (in diesem Fall Modellobjekte/DTOs) zwischen verschiedenen .Net-Plattformen zu erleichtern.

In Visual Studio 2017 Sie können jetzt eine .Net Standard-Klassenbibliothek Vorlage auswählen. Diese Klassenbibliothek kann auf verschiedene Versionen des .NET-Standards ausgerichtet werden. Die Version des .Net-Standards, auf den Sie zielen sollten, hängt davon ab, auf welchen .Net-Plattformen Sie den Code teilen möchten.

Für diese spezielle Frage, möchten wir ein Universal-Windows-Plattform (UWP) App und Asp.Net Core-App unterstützen. Daher sollten wir uns auf compatibility table beziehen, um die Version des .Net-Standards zu ermitteln, der beide Plattformen unterstützt. In diesem Fall wäre es .Net Standard 1.4. Nachdem Sie die Klassenbibliothek auf den .Net-Standard 1.4 ausgerichtet haben, können Sie Referenzen zu der Klassenbibliothek aus Ihren UWP- und Asp.Net-Kernprojekten hinzufügen.

Um besser zu verstehen, was die .NET-Standards ist und wie es erleichtert Code-Sharing, empfiehlt die Überprüfung ich folgendes:

  1. Introducing .NET Standard
  2. Video Series on .NET Standard (dies ist besonders gut)
  3. .Net Standard FAQ
Verwandte Themen