简体   繁体   English

“ASP.NET Core 1.0 RC2中找不到”类型或命名空间名称“

[英]“The type or namespace name could not be found” in ASP.NET Core 1.0 RC2

I'm currently trying ASP.NET Core 1.0 RC2. 我目前正在尝试ASP.NET Core 1.0 RC2。 I've created it as a .NET Framework project (as opposed to a .NET Core project) and added references to our Models library, using .NET Framework 4.5, via a project reference: 我已将其创建为.NET Framework项目(而不是.NET Core项目),并通过项目引用添加了对使用.NET Framework 4.5的Models库的引用:

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

Now when adding a model directive to my view, the following error occurs: 现在,在我的视图中添加模型指令时,会发生以下错误:

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

It also displays in intellisense: Cannot resolve tag 'Project.Models.User' and Cannot resolve symbol 'model' 它还显示在intellisense中: 无法解析标签'Project.Models.User'并且无法解析符号'model'

I have added a project reference, added a using statement... Still this error occurs. 我添加了一个项目引用,添加了一个using语句......仍然会发生此错误。 Why is that? 这是为什么?

This is a bug in RC2 with an open issue . 这是RC2 中存在未解决问题的错误。 A workaround in the issue discussion that works for me is: 问题讨论中的解决方法对我有用:

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

In your example, you'd need to do this for Project.Models.User . 在您的示例中,您需要为Project.Models.User执行此操作。

Not sure whether 4.6.1 and Update 2 is needed for both projects , I've only tried with that. 不确定两个项目是否需要4.6.1和更新2 ,我只尝试过。

The class library project has to have been created in Visual Studio 2015 Update 2 and it must use .NET Framework 4.6.1. 必须在Visual Studio 2015 Update 2中创建类库项目,并且必须使用.NET Framework 4.6.1。 And your ASP.NET Core project must use .NET Framework 4.6.1 as well. 您的ASP.NET Core项目也必须使用.NET Framework 4.6.1。

RC2 is the first version that supposedly supports including class libraries. RC2是第一个支持包括类库的版本。 But I've found that if your class library has certain dependencies (like System.DirectoryServices.AccountManagement ) it will fail to load at runtime. 但我发现如果你的类库有某些依赖项(如System.DirectoryServices.AccountManagement ),它将无法在运行时加载。

I fixed it by examining the file _ViewImports.cshtml. 我通过检查文件_ViewImports.cshtml来修复它。 That is where all usings go that get loaded in to all views. 这就是所有使用的内容都被加载到所有视图中。

For Instance - 例如 -

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

Ensuring that the preserveCompilationContext is present and true in the project.json buildOptions has fixed this issue for me with Visual Studio Code on Ubuntu 在project.json buildOptions中确保preserveCompilationContext存在且为true已在Ubuntu上使用Visual Studio Code修复了此问题

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM