2016-07-06 8 views
13

Ich bin ziemlich neu bei .Net Core, habe aber eine funktionierende Asp.Net Core WebAPI-Site erstellt - jetzt möchte ich Code mit einem anderen teilen Projekt ...Eine gemeinsame Klassenbibliothek, die sowohl von .NET Core als auch von .Net 4.5.2 verwendet wird

  • Ich habe Visual Studio 2015 mit Update 3 installiert.
  • Ich habe DotNetCore.1.0.0-VS2015Tools.Preview2.exe installiert von here.

Ich möchte eine gemeinsam genutzte Bibliothek (PCL) erstellen, die von zwei anderen Bibliotheken verzehrt werden können - es enthält nur primitive Klassen/Interfaces ohne andere Abhängigkeiten. Eine der verbrauchenden Bibliotheken ist ein neues Vanille-Projekt, das auf "netstandard1.6" abzielt, das andere ist eine alte Client-Bibliothek, die auf .NET 4.5.2 abzielt (ich kann dies auf 4.6.x aufrüsten, wenn ich muss).

Ich war im Kreis, und ich kann nicht die PCL die netstandard1.6 Bibliothek Referenz machen - Ich werde gesagt, nur die Typen fehlen:

CS0246 Fehler: Der Typ oder Namespace-Name 'SomeTypeHere' konnte nicht gefunden werden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?)

Die PCL dem Namen "ClassLibrary1" 's project.json wird automatisch generiert als:

{ 
    "supports": {}, 
    "dependencies": { 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
    "NETStandard.Library": "1.6.0" 
    }, 
    "frameworks": { 
    "netstandard1.1": {} 
    } 
} 

Meine raubend Bibliothek project.json ist:

{ 
    "version": "1.0.0-*", 
    "dependencies": { 
    "NETStandard.Library": "1.6.0", 
    "Newtonsoft.Json": "9.0.1" 
    }, 
    "frameworks": { 
    "netstandard1.6": { 
     "dependencies": { 
     "ClassLibrary1": { 
      "target": "project" 
     } 
     } 
    } 
    } 
} 

Wie kann ich diese Arbeit machen?

EDIT 2016.07.07:

Ich habe die folgende Lösung verfügbar gemacht, die mein Setup zeigt: https://github.com/JonnyWideFoot/netcore-prototype See ExperimentClient :: GetLocationAsync für wo Ich mag würde die Verträge Bibliothek innerhalb des .NET verwenden, 4.5.2/4.6.x Client.

+0

FYI - sie werden nicht mehr PCLs mit dem Aufkommen von .NET Core :) –

Antwort

1

Die einzige Möglichkeit, die ich gefunden habe, um diese Arbeit zu machen, ist zu hacken Bezug auf die.csproj Datei der Client-Bibliothek: https://github.com/JonnyWideFoot/netcore-prototype/blob/master/src/JE.API.Experiment.Client/JE.API.Experiment.Client.csproj

<Reference Include="JE.Api.Experiment.Contract, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\JE.Api.Experiment.Contract\bin\$(Configuration)\net452\JE.Api.Experiment.Contract.dll</HintPath> </Reference>

Durch Hartcodierung den Pfades zum richtigen Ausgabeordner aus den Verträgen Bibliothek, alles ist in Ordnung.

... denken, das könnte ein Fehler im Visual Studio sein.

4

Hier ist, wie ich Bibliotheken erstellen geteilt, die von beiden .NET Core-Projekte und .NET 4.5 Projekte verbraucht werden können:

SharedLibrary \ project.json

"dependencies": { }, 
"frameworks": { 
    "net45": { }, 
    "netstandard1.1": { 
    "dependencies": { 
     "NETStandard.Library": "1.6.0" 
    } 
    } 
}, 
"version": "1.0.0" 

A raubend (.NET-Core) Bibliothek in der gleichen Lösung, verweist es wie folgt aus:

"dependencies": { 
    "SharedLibrary": { 
    "target": "project", 
    "version": "1.0.0" 
    } 
}, 
"frameworks": { 
    "netstandard1.1": { } 
    } 
} 

A raubend .NET 4.5 Projektmitwürde mit Ausnahme von net45 im Frameworks-Abschnitt gleich aussehen. Die Installation in einem csproj-basierten .NET 4.5-Projekt funktioniert auch, wenn ein NuGet-Paket für SharedLibrary erstellt wird.

Gemäß der .NET Platform Standard docs sollte das einfache Targeting netstandard1.1 ermöglichen, dass die gemeinsam genutzte Bibliothek auch in .NET 4.5 + -Projekten installiert wird. Ich bin damit auf seltsame Probleme gestoßen, aber es könnte das Ergebnis von Beta-Werkzeugen gewesen sein.

+0

Vielen Dank! - Ich habe die 'netstandard side' jetzt funktioniert, aber immer noch Probleme mit der Verweisung auf das Shared-Projekt vom .Net 4.5.2-Client. { "Abhängigkeiten": {}, "Frameworks": { "net452": {}} , "Version": "1.0.0" } Referenz ich das Projekt in Visual Studio (beide Bibliotheken sind in der gleichen Lösung), und ich bekomme "Fehler CS0234". Die gemeinsam genutzte Bibliothek hat jedoch eine .Net 4.5.2-DLL erzeugt. seltsam, wenn ich das direkt referenziere, funktioniert alles. –

+0

Wenn das Projekt Referenzierung statt der DLL ist die HintPath im Eigenschaften-Fenster korrekt: \ ClientLib \ bin \ Debug \ net452 \ SharedLib.dll Alles sehr seltsam ... Wie haben sich M $ dieses Zeug gemacht, so kompliziert . .Net war einmal einfach :-( –

+0

@ JonRea: Um zu verdeutlichen - beziehen Sie sich auf das freigegebene Projekt von einem .NET 4.5.2-Projekt, das auf 'project.json' basiert oder auf' csproj' basiert? –

Verwandte Themen