2016-07-06 31 views
13

Sono abbastanza nuovo su .Net Core, ma ho creato un sito WebAPI di Asp.Net Core funzionante - ora voglio condividere del codice con un altro progetto ...Una libreria di classi comune utilizzata da .NET Core e .Net 4.5.2

  • Ho Visual Studio 2015 con l'aggiornamento 3 installato.
  • Ho DotNetCore.1.0.0-VS2015Tools.Preview2.exe installato da here.

Vorrei creare una libreria condivisa (PCL) che può essere utilizzata da altre due librerie: contiene solo classi/interfacce primitive senza altre dipendenze. Una delle librerie di consumo è un nuovo progetto vanilla che si rivolge a "netstandard1.6", l'altra è una vecchia libreria client che punta a .Net 4.5.2 (Posso aggiornarlo a 4.6.x se devo).

Sono stato in tondo, e non riesco a fare il riferimento alla libreria netstandard1.6 il PCL - ottengo solo detto ai tipi mancano:

CS0246 Errore: Il nome di tipo o spazio 'SomeTypeHere' non è stato trovato (che le manca un un riferimento all'assembly direttiva using o?)

Il PCL denominato "ClassLibrary1" 's project.json viene generato automaticamente come:

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

mio consumando biblioteca project.json è:

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

Come posso fare questo lavoro?

EDIT 2016/07/07:

ho fatto la seguente soluzione disponibile, il che dimostra la mia configurazione: https://github.com/JonnyWideFoot/netcore-prototype See ExperimentClient :: GetLocationAsync per cui vorrei utilizzare i contratti Biblioteca all'interno del Net 4.5.2/4.6.x Client.

+0

FYI: non sono più chiamati PCL con l'avvento di .NET Core :) –

risposta

1

L'unico modo che ho trovato per fare questo lavoro, è quello di hackerare il riferimento a.file di csproj della libreria 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>

By hard-codifica il percorso della cartella di output corretto dalla libreria contratti, tutto va bene.

... pensando che questo potrebbe essere un bug in Visual Studio.

4

Ecco come creo le librerie che possono essere consumati da entrambi i progetti fondamentali .NET e .NET 4.5 progetti condivisi:

SharedLibrary \ project.json

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

A consumare (.NET Nucleo) libreria nella stessa soluzione fa riferimento in questo modo:

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

a consumare NET 4.5 progetto utilizzando project.json sembrerebbe lo stesso ad eccezione di net45 nella sezione quadri. L'installazione in un progetto .NET 4.5 basato su csproj funziona anche se viene prodotto un pacchetto NuGet per SharedLibrary.

In base allo .NET Platform Standard docs, il semplice targeting netstandard1.1 dovrebbe consentire l'installazione della libreria condivisa anche in progetti .NET 4.5+. Ho incontrato strani problemi con questo, ma potrebbe essere stato il risultato di strumenti beta.

+0

Grazie! - Ho ora funzionato il "lato netstandard", ma ho ancora problemi con il riferimento al progetto Shared dal client .Net 4.5.2. { "dipendenze": {}, "quadri": { "net452": {}} , "versione": "1.0.0" } mi fanno riferimento al progetto in Visual Studio (entrambi le librerie sono nella stessa soluzione) e ottengo "errore CS0234". Tuttavia, la libreria condivisa HAS ha prodotto una DLL .Net 4.5.2. stranamente se faccio riferimento direttamente a questo, tutto funziona. –

+0

Quando si fa riferimento al progetto anziché alla DLL, il hintpath nella finestra delle proprietà è corretto: \ ClientLib \ bin \ Debug \ net452 \ SharedLib.dll Tutto molto strano ... Come M $ ha reso questa roba COSÌ complicata . .Net era semplice :-( –

+0

@JonRea: per chiarire - stai facendo riferimento al progetto condiviso da un progetto .NET 4.5.2 basato su 'project.json' o basato su' csproj'? –

Problemi correlati