2015-08-04 33 views
17

Ciao innanzitutto so che domande vagamente simili sono state fatte prima, ma sono obsolete ora, sto usando Visual Studio 2015 rtm e ASP.NET 5 beta 6Problema di aggiunta del riferimento al progetto di libreria di classi in ASP.NET 5 (Core)

Sto cercando di aggiungere un riferimento a un normale progetto di libreria di classi (cioè non vnext) alla mia applicazione Web vnext. Se seguo questi passi:

  1. Creare un nuovo progetto web app

  2. Rimuovere il quadro "dnxcore50" dal project.json

  3. Aggiungere un nuovo progetto per una libreria di classi normale

  4. Spostare manualmente il progetto della libreria di classi nella cartella/src (altrimenti viene visualizzato l'errore "La dipendenza MyClassLibrary1> = 1.0.0- * non può essere risolta.")

  5. Aggiungere un riferimento alla presente libreria di classi

Ora costruisce OK, ma se provo e aggiungi "utilizzando MyClassLibrary1" dice MyClassLibrary1 non esiste nel contesto corrente.

Se poi cambio la libreria di classi per il profilo .NET 4 Client profile (per impostazione predefinita era 4.6) funziona correttamente, tuttavia .NET 4 full o 4.5 non funziona. Ho bisogno che sia 4.5 o superiore in quanto ho bisogno di fare riferimento a vari pacchetti che richiedono questo. Idealmente, tutto sarebbe come target 4.6.

Questo è il mio file project.json:

{ 
    "webroot": "wwwroot", 
    "userSecretsId": "aspnet5-WebApplication2-6767111e-0eba-42a4-9d68-4b6c20767518", 
    "version": "1.0.0-*", 

    "dependencies": { 
    "EntityFramework.SqlServer": "7.0.0-beta6", 
    "EntityFramework.Commands": "7.0.0-beta6", 
    "Microsoft.AspNet.Mvc": "6.0.0-beta6", 
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta6", 
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta6", 
    "Microsoft.AspNet.Authentication.Facebook": "1.0.0-beta6", 
    "Microsoft.AspNet.Authentication.Google": "1.0.0-beta6", 
    "Microsoft.AspNet.Authentication.MicrosoftAccount": "1.0.0-beta6", 
    "Microsoft.AspNet.Authentication.Twitter": "1.0.0-beta6", 
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta6", 
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta6", 
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta6", 
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6", 
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6", 
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta6", 
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta6", 
    "Microsoft.Framework.Configuration.Abstractions": "1.0.0-beta6", 
    "Microsoft.Framework.Configuration.Json": "1.0.0-beta6", 
    "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta6", 
    "Microsoft.Framework.Logging": "1.0.0-beta6", 
    "Microsoft.Framework.Logging.Console": "1.0.0-beta6", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta6" 
    }, 

    "commands": { 
    "web": "Microsoft.AspNet.Hosting --config hosting.ini", 
    "ef": "EntityFramework.Commands" 
    }, 

    "frameworks": { 
    "dnx451": { 
     "dependencies": { 
     "MyClassLibrary1": "1.0.0-*" 
     } 

    } 
    }, 

    "exclude": [ 
    "wwwroot", 
    "node_modules", 
    "bower_components" 
    ], 
    "publishExclude": [ 
    "node_modules", 
    "bower_components", 
    "**.xproj", 
    "**.user", 
    "**.vspscc" 
    ], 
    "scripts": { 
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ] 
    } 
} 

E il mio file global.json:

{ 
    "projects": [ 
    "src", 
    "test", 
    "wrap" 
    ], 
    "sdk": { 
    "version": "1.0.0-beta6" 
    } 
} 
+0

non riesco nemmeno a costruire dopo l'aggiunta di un progetto di libreria di classi al mio progetto esistente; s soluzione. Tuttavia, se ricomincio, funziona, quale potrebbe essere la ragione. – Randeep

+0

sollevato come problema di nucleo aspnet: https://github.com/aspnet/Home/issues/1513 – OzBob

risposta

23

Ecco come ho fatto usando beta6 (UPDATE: E 'ancora valido per il RC1 UPDATE 1).

  1. Rimuovere quadri => dnxcore dal project.json (non è possibile indirizzare lo stesso utilizzando librerie di classi .NET completi)
  2. Nel progetto di destinazione fare clic destro sul Riferimenti => Aggiungi riferimento
  3. Naviga e selezionare la dll di riferimento che si desidera aggiungere.

Questo aggiungerà una voce di riferimento al file project.json. Dietro le quinte, la dll viene copiata nella directory/lib nella soluzione e un "progetto wrapper" con solo un file project.json creato nella cartella/wrap. Il progetto wrapper è documentato qui (non abbastanza bene però): https://github.com/aspnet/Home/wiki/Project.json-file#bin-syntax-wrapping-a-dll

Questo è tutto! Ho appena testato questo scenario. Spero che questo ti aiuti.

+1

Grande, non ho trovato quel collegamento, i documenti sono comprensibilmente un po 'ruvidi. Saluti. – MartinR

+1

Davvero grato per la tua risposta, mbudnik. La prima volta qualcuno ha affermato chiaramente (che ho trovato). La prima volta sono stato in grado di fare riferimento e utilizzare i miei progetti di librerie di classi in una soluzione multi-progetto da un progetto di front-end ASP.NET 5 MVC 6 beta6 dopo aver provato molte altre metodologie da molte altre, anche piuttosto recenti, risposte qui . Dico a me stesso di stare lontano dal bordo sanguinante e poi ogni anno passo dentro e il mio piede si taglia. – StackOverflowUser

+1

In RC1 ho ancora bisogno di modificare project.json manualmente per cambiarlo nella sintassi bin di '{assembly, pdb}' (vedi i documenti di GitHub). Inoltre, poiché i miei riferimenti DLL sono progetti nella stessa soluzione, avevo bisogno di aggiungerli come dipendenze del progetto e assicurarsi che il sito Web fosse sotto di loro nell'ordine di costruzione del progetto. – zemien

15

Se qualcun altro è in difficoltà con questo particolare errore, la chiave è aggiungere il riferimento "sfogliando" al file effettivo quando si aggiunge il riferimento e non utilizzando la scheda "Progetto".

Questo non sembra memorizzare il percorso, ma aggiunge il riferimento al project.json come al solito. Ovviamente un bug (beta7) al momento di scrivere questo.

+0

Ho appena avuto questo errore e questo l'ha risolto, un po 'uno scherzo davvero. Aggiungendo da progetti il ​​riferimento non sembra avere una versione contro di esso. –

+0

Sto riscontrando questo problema con un progetto di front-end MV.NET di ASP.NET 5 che fa riferimento a librerie di classi ASP.NET 5 compresse. Qualche idea su come gestire il problema con i progetti pacchettizzati? A proposito, sto usando RC1. – Sam

2

Ecco come ho fatto in ASPT.NET 5 RC 1 Update 1:

  1. aggiungere il riferimento del progetto
  2. Aperto project.json, all'interno del nodo "frameworks":, eliminare la riga "dnxcore50": { } (JSON non consente il commento). Quando si salva il file json, il riferimento DNX Core 5 deve essere rimosso immediatamente.

  3. Costruire il progetto. Dovrebbe costruire con successo.

  4. Mettere "dnxcore50": { } indietro. Non riporta indietro il DNX 5 Core.

1

Per aggiungere normale progetto NET nella versione successiva alla 4.5.1 è sufficiente rimuovere e rinominare dnxcore dnx451 a dnx461

+1

Sì, crea. Ho provato ad aggiungere un riferimento alla libreria di classi .NET 4.6.1 al sito Web ASP.NET Core. Quando si esegue IIS Express, nel browser viene visualizzato il messaggio "Questo sito non può essere raggiunto". Il costruttore della classe di avvio non viene chiamato. – Andez

+0

Smae problema qui. Costruisce ma si blocca dopo l'avvio sul debug di IISExpress (F5). –

1

Queste risposte davvero mi ha aiutato a capire questo. Nel mio caso, la pulizia delle cose nella cartella "wrap" della soluzione ha risolto gli errori di compilazione. Avevo ribattezzato alcune librerie di classi e quelle vecchie erano ancora lì. Rimozione dei vecchi progetti e aggiornamento dei file project.json nei progetti esistenti ha fatto il trucco. Assicurati che le dipendenze nei file project.json rispettino i progetti corretti.

Ecco un esempio:

"dependencies": { 
    "DomainRepository": "1.0.0-*", 
    "Domain": "1.0.0-*", 
    "DomainContract": "1.0.0-*" 
    } 
Problemi correlati