Ich habe eine Bibliothek erstellt, die ich in einer Portable Class Library sowie einer regulären .NET-Anwendung verwenden kann. Die Art, wie ich dies erreicht ist durch mehrere Lösungen/Projekte erstellen, die auf die gleichen Dateien verweisen:Mehrere Plattformprojekte und NuGet
Src/
Dismissile.sln
Dismissile.Portable.sln
Dismissile/
Dismissile.csproj
Dismissile.Portable.csproj
Class1.cs
Dismissile.sln umfasst Dismissile.csproj und zielt auf .NET Framework 4.5.2 Dismissile.Portable.sln Dismissile enthält. Portable.csproj ist ein tragbares Klassenbibliotheksprojekt, das auf .NET Framework 4.5, Xamarin.Android und Xamarin.iOS abzielt.
Jedes Projekt enthält Class1.cs. Ich habe einige bedingte Kompilierungssymbole in jedem Projekt wie PORTABLE und NET452 erstellt.
Das scheint so gut zu funktionieren, aber jetzt muss ich ein NuGet-Paket für JSON.NET in meine Projekte hinzufügen.
Wenn ich ein NuGet Paket in meinem tragbaren Projekt hinzufügen wird es die folgenden in meinem packages.config erstellen:
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="portable40-net40+sl5+win8+wp8+wpa81" />
Allerdings, wenn ich es in meinem anderen Projekt hinzufügen wird es die folgenden in Pakete erstellen. config:
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
gibt es eine Möglichkeit eine separate packages.config haben, so dass jedes Projekt auf meine NuGet Abhängigkeiten die richtige Referenz enthält?
Gibt es irgendwelche Einschränkungen, die ich beachten muss, wenn ich die Dateien als Links hinzufüge? Was kann ich nicht tun? Könnte meine Haupt-.NET-Projektdatei weiterhin in dem Ordner vorhanden sein, in dem sich alle CS-Dateien befinden, und dann nur separate Projekte für die anderen Plattformen erstellen? – Dismissile
Der entscheidende Punkt ist, dass verschiedene Ordner für jede Plattform unterschiedliche * packages.config * -Dateien haben. Es kann Probleme mit Framework-Methoden geben (da ihre Signatur, Verfügbarkeit, ... unterschiedlich sein kann), aber dies kann mit Compiler-Konstanten und '# if'-Anweisungen oder partiellen Klassen gelöst werden, wo Sie Framework-spezifische Implementierungen in einem non bereitstellen Teilklasse. –
Richtig, aber hätten Sie einen separaten Ordner für alle .cs-Dateien ohne Projekt in diesem Ordner, und erstellen Sie dann einen anderen Ordner für die Projektdatei und fügen Sie Links und einen anderen Ordner für das portable Projekt hinzu und fügen Sie Links hinzu, oder würde es in Ordnung, einen Ordner mit den CS-Dateien und ein Projekt ohne Links zu haben, dann einen anderen Ordner für das portable Projekt, das Links verwendet. – Dismissile