2016-06-02 37 views
6

Attualmente sto provando ASP.NET Core 1.0 RC2. Ho creato come un progetto .NET Framework (in contrapposizione a un progetto .NET Core) e riferimenti aggiunto alla nostra biblioteca Models, utilizzando .NET Framework 4.5, tramite un riferimento al progetto:"Impossibile trovare il nome di tipo o spazio dei nomi" in ASP.NET Core 1.0 RC2

"frameworks": { 
    "net46": { 
    "dependencies": { 
     "Project.Core": { 
     "target": "project" 
     }, 
     "Project.DataAccess": { 
     "target": "project" 
     }, 
     "Project.Encryption": { 
     "target": "project" 
     }, 
     "Project.Models": { 
     "target": "project" 
     }, 
     "Project.Resources": { 
     "target": "project" 
     } 
    } 
    } 
}, 

Ora, quando l'aggiunta di una direttiva modello per mio punto di vista, il seguente errore si è verificato:

@model System.Collections.Generic.List<Project.Models.User> 

The type or namespace name 'Project' could not be found (are you missing a using directive or an assembly reference?) 
    public class _Views_Home_Index_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<System.Collections.Generic.List<Project.Models.User>> 
The type or namespace name 'Project' could not be found (are you missing a using directive or an assembly reference?) 
     public Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<System.Collections.Generic.List<Project.Models.User>> Html { get; private set; } 

Esso mostra anche in intelliSense: non può risolvere tag 'Project.Models.User' 'modello' e Impossibile risolvere il simbolo

Ho aggiunto un riferimento al progetto, aggiunto un'istruzione using ... Ancora questo errore si verifica. Perché?

risposta

7

Questo è un bug in RC2 with an open issue. Un workaround nel numero di discussioni che funziona per me è:

services.AddMvc() 
.AddRazorOptions(options => 
{ 
    var previous = options.CompilationCallback; 
    options.CompilationCallback = context => 
    { 
     previous?.Invoke(context); 
     context.Compilation = context.Compilation.AddReferences(MetadataReference.CreateFromFile(typeof(MyClass).Assembly.Location)); 
    }; 
    }); 

Nel tuo esempio, avresti bisogno di fare questo per Project.Models.User.

Non sicuro se 4.6.1 and Update 2 is needed for both projects, ho provato solo con quello.

+2

Questo bug è ancora presente in ASP.NET Core 1.1 in Visual Studio 2017. –

+0

Dai commenti su https://github.com/aspnet/Mvc/issues/4686 e https://github.com/aspnet/Razor/issues/755 sembra che le persone abbiano risolto il problema con successo. Cosa succede se provi i metodi descritti qui? @MichaelMortensen – bzlm

+0

L'ho risolto usando la tua risposta e ho presentato un errore a Microsoft. Sto usando VS2017. –

3

Il progetto della libreria di classi deve essere stato creato in Visual Studio 2015 Update 2 e deve utilizzare .NET Framework 4.6.1. E il tuo progetto ASP.NET Core deve utilizzare anche .NET Framework 4.6.1.

RC2 è la prima versione che suppone supporti librerie di classi incluse. Ma ho scoperto che se la tua libreria di classi ha certe dipendenze (come System.DirectoryServices.AccountManagement) non riuscirà a caricare in fase di esecuzione.

+0

v'è una reale differenza quando si crea il progetto di libreria (che è stato creato da VS 2010 circa qualche anno fa) quando utilizza .NET Framework 4.6.1? – SeToY

+0

Sì, una grande differenza. Questo è qualcosa a cui gli sviluppatori di Microsoft sono apparentemente in difficoltà. Ho confermato che funziona solo quando entrambi i progetti sono stati creati in VS 2015 Update 2 ed entrambi utilizzano 4.6.1. Ricorda che questa è una pre-release e le cose potrebbero cambiare. Ma per ora, è così. –

+0

Clint - Sono felice che tu abbia scelto di continuare a contribuire. Ho svalutato questa risposta. –

0

L'ho risolto esaminando il file _ViewImports.cshtml. È qui che passano tutti gli usi che vengono caricati in tutte le visualizzazioni.

per esempio -

@using MyProject 
@using MyProject.Models 
@using MyProject.Models.AccountViewModels 
@using MyProject.Models.ManageViewModels 
@using Microsoft.AspNetCore.Identity 
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 
0

Garantire che la preserveCompilationContext è presente e vero nei buildOptions project.json ha risolto questo problema per me con codice Visual Studio su Ubuntu

{ 
    "buildOptions": { 
     "emitEntryPoint": true, 
     "warningsAsErrors": true, 
     "preserveCompilationContext": true 
    }, 
Problemi correlati