2016-06-02 2 views
6

В настоящее время я пытаюсь использовать ASP.NET Core 1.0 RC2. Я создал его как .NET Framework проекта (в отличие от проекта .NET ядра) и добавлены ссылки на наш Models библиотеку, используя .NET Framework 4.5, с помощью ссылки проекта:«Тип или имя пространства имен не найден» в 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" 
     } 
    } 
    } 
}, 

Теперь при добавлении модель директивы на мой взгляд, возникает следующая ошибка:

@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; } 

Он также отображает в IntelliSense: не удается разрешить тег «Project.Models.User» и не удается разрешить символ «модель»

Я добавил ссылку на проект, добавил инструкцию по использованию ... Эта ошибка возникает. Почему это?

ответ

7

Это ошибка в RC2 with an open issue. workaround в вопросе обсуждения, который работает для меня:

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)); 
    }; 
    }); 

В вашем примере, вы должны сделать это для Project.Models.User.

Не уверен, 4.6.1 and Update 2 is needed for both projects, я только пробовал с этим.

+2

Эта ошибка все еще присутствует в ASP.NET Core 1.1 в Visual Studio 2017. –

+0

Из комментариев по https://github.com/aspnet/Mvc/issues/4686 и https://github.com/aspnet/Razor/issues/755 похоже, что люди успешно решили это. Что делать, если вы попробуете методы, описанные там? @MichaelMortensen – bzlm

+0

Я решил это с помощью вашего ответа, и я подал ошибку Microsoft. Я запускаю VS2017. –

3

Проект библиотеки классов должен быть создан в Visual Studio 2015 Update 2, и он должен использовать .NET Framework 4.6.1. И ваш проект ASP.NET Core должен также использовать .NET Framework 4.6.1.

RC2 - первая версия, которая, предположительно, поддерживает библиотеки классов. Но я обнаружил, что если ваша библиотека классов имеет определенные зависимости (например, System.DirectoryServices.AccountManagement), она не будет загружаться во время выполнения.

+0

Есть ли реальная разница при создании проекта библиотеки (который был создан VS 2010 или так несколько лет назад), когда он использует .NET Framework 4.6.1? – SeToY

+0

Да, большая разница. Это то, с чем, по-видимому, сталкиваются разработчики Microsoft. Я подтвердил, что он работает только тогда, когда оба проекта были созданы в VS 2015 Update 2, и оба используют 4.6.1. Помните, что это предварительный релиз, и все может измениться. Но пока это так. –

+0

Клинт - Я рад, что вы решили продолжать вносить свой вклад. Я поддержал этот ответ. –

0

Я исправил его, проверив файл _ViewImports.cshtml. Вот где все игры идут, которые загружаются во все виды.

Для Instance -

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

Обеспечение, что preserveCompilationContext присутствует и правда в project.json buildOptions зафиксировала этот вопрос для меня с Visual Studio кодекса Ubuntu

{ 
    "buildOptions": { 
     "emitEntryPoint": true, 
     "warningsAsErrors": true, 
     "preserveCompilationContext": true 
    }, 
Смежные вопросы