2016-04-24 13 views
5

È comune suddividere una soluzione di grandi dimensioni in più progetti per una questione di organizzazione della base di codice e ciò è stato fatto facilmente nelle versioni precedenti di .NET Framework da Visual Studio.Come specificare le dipendenze su altri progetti con CLI .NET?

Come si può fare lo stesso con .NET CLI? Supponiamo di avere il seguente scenario semplificato per esempio:

- Solution Folder 
    - global.json 
    - src 
     - LibProject 
     - ConsoleProject 

Supponiamo ora che il ConsoleProject dipende dalla LibProject. Intuitivamente I belive che questo significa che nel ConsoleProject il project.json dovrà contenere una sezione dependencies come questo:

"dependencies": { 
    "Microsoft.NETCore.App": { 
     "type": "platform", 
     "version": "1.0.0-*" 
    }, 
    "LibProject": "1.0.0-*" 
} 

Ma se facciamo questo, quando cerchiamo di ripristinare le dipendenze per l'ConsoleProject o quando si cerca di costruiscilo, non possiamo farlo Quando proviamo a ripristinare viene visualizzato il messaggio

Impossibile risolvere 'LibProject (> = 1.0.0)' per '.NETCoreApp, Version = v1.0'.

Capisco il motivo. Durante il ripristino, NuGet sta cercando di trovarlo come pacchetto sui feed specificati su NuGet.config. Ma non dovrebbe farlo, dovrebbe usare quello nella cartella di pari livello.

Nelle precedenti versioni di .NET Core, aggiungerevamo il riferimento tramite VS e quindi, se provassimo a creare il ConsoleProject, VS crea innanzitutto LibProject e utilizza la DLL corrispondente.

Come viene fatto lo stesso tipo di cosa qui? Come facciamo a fare riferimento a un altro progetto nella stessa soluzione e come ripristiniamo/costruiamo/eseguiamo con la CLI .NET considerando questo tipo di dipendenza?

+1

Hai avuto fortuna se si fa ' "LibProject": { "target": "progetto"} '? – khellang

+0

Nelle versioni più recenti del cli dotnet che utilizza il formato 'csproj', è possibile eseguire' dotnet aggiungi riferimento ../ MyProject/MyProject.csproj' https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-add-reference – dbattaglia

risposta

4

Dopo aver definito i progetti che la soluzione ha sul file global.json, è sufficiente fare riferimento al progetto.json per nome senza una versione specifica.

Esempio:

global.json

{ 
    "projects":[ 
     "ConsoleProject", 
     "LibProject" 
    ] 
} 

ConsoleProject/project.json

{ 
    "dependencies":{ 
     "LibProject":"", 
    } 
} 

È possibile trovare un esempio migliore in qui: http://forums.dotnetfoundation.org/t/referencing-another-project-in-net-core/1298/2

O in questo repository : https://github.com/cartermp/dnx-apps/tree/master/multiple-projects

+0

Grazie per la risposta, ma questo non ha funzionato. Forse ha funzionato prima con DNX, ma con .NET CLI non funziona. In realtà questo approccio sembra strano, perché stiamo eseguendo 'dotnet restore' dalla cartella' src/ConsoleProject' mentre 'global.json' è seduto nella cartella' src', così che la toolchain 'dotnet' non può vedere esso. Ad ogni modo, il problema che sto affrontando non è proprio la specificazione di una versione, ma il prelievo '' dotnet restore' 'di 'LibProject' dalla cartella di pari livello, invece di guardare i feed di NuGet. – user1620696

+0

Sembra che il file global.json non sia più richiesto. Quale versione di dot net cli stai usando? Ecco un problema simile al tuo e sembra funzionare. https://github.com/dotnet/cli/issues/966#issuecomment-174206475 –

+1

È la versione 1.0.0-rc2-002476. Ad ogni modo, l'ho fatto funzionare ora, era un errore di battitura sulle dipendenze che stava causando il problema. Comunque: ci sono alcuni dettagli che ho scoperto - per usare la toolchain 'dotnet', il file' global.json' non è realmente necessario, ma è necessario per il funzionamento di Omnisharp nel VS Code. Inoltre, possiamo effettivamente fare riferimento alla versione del progetto, come "LibProject": "1.0.0 - *" 'anche questo funziona bene. Grazie per l'aiuto. – user1620696

2

Secondo the documentation on writing libraries, il nuovo modo corretto di specificare una dipendenza da un altro progetto nella soluzione è:

{ 
    "dependencies":{ 
     "AwesomeLibrary.Core": { 
      "version": "1.0.0", 
      "target": "project" 
     } 
    } 
} 

Il target: project po dice NuGet che non dovrebbe apparire in una fonte pacchetto.

Questo presuppone che la seguente struttura di directory per la vostra soluzione:

AwesomeLibrary 
|__global.json 
|__/src 
    |__/AwesomeLibrary.Core 
     |__Source Files 
     |__project.json 
    |__/AwesomeLibrary.Other 
     |__Source Files 
     |__project.json 
/test 
    (... etc) 

Con un file global.json come:

{ 
    "projects":["src", "test"] 
} 
+1

Il collegamento della documentazione è ora rotto. Non ero in grado di farlo funzionare. Sto indovinando che hanno cambiato ancora gli attrezzi dato che i documenti di aiuto sono andati. – trevorc

+1

Link aggiornato: https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/libraries#how-to-use-multiple-projects –

+0

Aggiornato. Grazie @tanguy_k! –