2016-07-06 20 views
13

Jestem całkiem nowa w .Net Core, ale stworzyłem działającą stronę ASPAPNet Core WebAPI - teraz chcę udostępnić kod innym projekt ...Wspólna biblioteka klas używana przez .NET Core i .Net 4.5.2

  • Mam program Visual Studio 2015 z zainstalowaną aktualizacją 3.
  • Mam zainstalowany program DotNetCore.1.0.0-VS2015Tools.Preview2.exe z here.

Chciałbym utworzyć wspólną bibliotekę (PCL), która może być używana przez dwie inne biblioteki - zawiera tylko prymitywne klasy/interfejsy bez żadnych innych zależności. Jedną z używanych bibliotek jest nowy projekt waniliowy, którego celem jest "netstandard1.6", a druga to stara biblioteka klientów, która jest przeznaczona dla .Net 4.5.2 (mogę ją zaktualizować do wersji 4.6.x, jeśli muszę).

Byłem w kółko i nie mogę dokonać netstandard1.6 Reference Library PCL - ja po prostu powiedział rodzaje brakuje:

Błąd CS0246: Typ lub obszaru nazw 'SomeTypeHere' nie można odnaleźć (czy brakuje using dyrektywa lub odwołania do zestawu?)

PCL nazwie "ClassLibrary1" 's project.json jest automatycznie generowana jako:

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

Moja biblioteka jest czasochłonne project.json:

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

Jak mogę dokonać tej pracy?

EDIT 7.07.2016:

Zrobiłem następujące rozwiązanie dostępne, co demonstruje mój setup: https://github.com/JonnyWideFoot/netcore-prototype widoczny ExperimentClient :: GetLocationAsync na którym chciałbym użyć umowy z bibliotekami w .NET 4.5.2/4.6.x Klient.

+0

FYI - nie są już nazywane PCL z pojawieniem się .NET Core :) –

Odpowiedz

1

Jedyny sposób, w jaki znalazłem to, aby to zadziałało, to zhackować odniesienie do.Plik csproj biblioteki Client: 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>

przez twarde kodowania ścieżkę do odpowiedniego folderu wyjściowego z biblioteki kontraktów, wszystko jest w porządku.

... myśląc, że to może być błąd w visual studio.

4

Oto jak utworzyć wspólny bibliotek, które mogą być spożywane zarówno z projektów .NET .NET 4.5 Core i projekty:

SharedLibrary \ project.json

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

trawiącym (.NET Rdzeń) biblioteki w tym samym roztworze odwołuje go tak:

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

trawiącym .NET 4.5 projekt używając project.json wyglądałoby tak samo z wyjątkiem net45 w sekcji frameworks. Instalowanie w projekcie opartym na architekturze .NET 4.5 w wersji csproj również działa, jeśli zostanie utworzony pakiet NuGet dla biblioteki SharedLibrary.

Zgodnie z .NET Platform Standard docs, po prostu kierowanie na netstandard1.1 powinno umożliwić również współdzieloną bibliotekę do zainstalowania w projektach .NET 4.5+. Wpadłem na dziwne rzeczy, ale mogło to być wynikiem narzędzi beta.

+0

Dzięki! - Teraz działa "strona o standardowej sieci", ale nadal mam problemy z odwoływaniem się do projektu współdzielonego z klienta .Net 4.5.2. { "Zależności": {}, "Ramki": { "net452": {} } "Wersja": "1.0.0" } odwołać projektu w visual studio (zarówno biblioteki są w tym samym rozwiązaniu), a otrzymuję komunikat "error CS0234". Jednak biblioteka współużytkowana HAS wygenerowała plik dll .Net 4.5.2. co dziwne, jeśli odwołam się do tego bezpośrednio, wszystko działa. –

+0

Podczas odwoływania się do projektu, a nie do biblioteki DLL, ścieżka hintpath w oknie właściwości jest poprawna: \ ClientLib \ bin \ Debug \ net452 \ SharedLib.dll Wszystkie bardzo dziwne ... W jaki sposób M $ uczyniło to tak skomplikowanym . .Net był prosty :-( –

+0

@JonRea: Aby wyjaśnić - czy odwołujesz się do współużytkowanego projektu z projektu .NET 4.5.2 opartego na 'project.json' lub na podstawie' csproj'? –