Visual Studio .net核心标记助手无法正常工作

时间:2016-12-30 11:34:21

标签: c# visual-studio asp.net-core asp.net-core-mvc

好吧,让我们开始吧。我正在使用Visual Studio 2015和ASP.NET核心标记助手完全停止工作,不明白为什么我没有改变任何东西。有一天我在工作,他们工作得很好,然后我在第二天进来,现在没有任何ASP.NET核心网络项目显示任何标签助手!?!我已经尝试创建一个全新的ASP.NET核心mvc项目,他们也不在那里工作!我完全陷入困境,是否有某些设置在Visual Studio中完全关闭它?

请注意,我已根据大多数其他帖子检查了通常会导致此问题的所有内容。我的_ViewImports有一行: -

@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

这是一个完整的project.json文件来自我刚创建的一个新项目,并且根本没有做任何更改: -

{
  "dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0"
  },

  "tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net452": { }
  },

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

  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

此外,所有_Layout视图和其他视图都完全失去了以前的突出显示。到目前为止,我在互联网上找到的其他人似乎都没有这个问题,不要以为其他人有任何想法吗?

编辑:

下面的答案之一解决了新解决方案中的新项目,但我仍然遇到现有解决方案/项目的问题。这是来自其中一个现有项目的项目文件内容,希望有人能在这里找到一些东西......

{
  "dependencies": {
    "BundlerMinifier.Core": "2.2.306",
    "Configuration.Web": "1.0.0-*",
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Mvc.TagHelpers": "1.1.0",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.1.0"
  },

  "tools": {
    "Microsoft.AspNetCore.Razor.Tools":  "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net452": {
      "dependencies": {
        "Aristotle.Service": {
          "target": "project"
        },
        "Infrastructure": {
          "target": "project"
        }
      }
    }
  },

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

  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

我已使用NuGet将所有软件包更新到最新版本......

10 个答案:

答案 0 :(得分:14)

我终于解决了这个问题,但不知道为什么修复工作或为什么它首先停止工作但是......

_View中的

导入以下行: -

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

我已更改为包含引号: -

@addTagHelper "*, Microsoft.AspNetCore.Mvc.TagHelpers"

然后我做了重建并再次工作!?!所有'asp-'属性现在也都像以前一样突出显示。为什么?!?嗯?!?

奇怪的是,如果我删除引号并重建,它仍然有效!好吧,至少在我的同事从源代码控制中获取文件之前,他们必须将引号放回!!

想出一个......

答案 1 :(得分:6)

对于遇到相同问题的任何人,请检查_ViewImports.cshtml的位置,该位置必须位于视图的同一文件夹中。例如,我创建了一个项目,该项目在_ViewImports.cshtml文件夹中已经有Pages文件,但是我创建并使用了位于另一个文件夹中的视图文件,因此ASP.NET找不到{{ 1}}。

如果有人在寻找project.json时遇到问题,则可以右键单击该项目并选择Manage Nuget Packages,然后安装_ViewImports.cshtml

希望这些建议可以对所有人有所帮助。

答案 2 :(得分:3)

在project.json依赖项中,您缺少TagHelpers。请在project.json的依赖项部分中添加以下行 -

"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.1",

在保存Project.json时,VS2015会自动恢复包。

如果不起作用,请右键单击项目,然后单击“还原包”选项。

如果这不起作用,请尝试使用dotnet restore CLI命令进行恢复。

答案 3 :(得分:2)

如果在使用“区域”时遇到相同的问题,请将_ViewImports文件添加到“区域”的Views文件夹中

答案 4 :(得分:1)

对于那些在 Razor 类库 (RCL) 中使用 ViewComponent 的人,除了一些其他已发布的建议之外,还有 3 个额外的调整为我解决了无法访问的标签助手:

  1. _ViewImports 文件应包含一个 @using 指令,该指令指向您的标签助手 NAMESPACE(即使智能感知会认为不需要)
  2. _ViewImports 引用 s/b 到 @addTagHelper *, <DLL NAME> - 不一定是命名空间名称
  3. 除了在 Web 应用程序根目录下之外,_ViewImports 文件还需要存在于 RCL 项目的根目录中 - 但不需要在 RCL 中的 MVC“区域”或任何“视图”文件夹中

答案 5 :(得分:0)

今天我有这个project.json:

{
  "dependencies": {
    "BundlerMinifier.Core": "2.4.337",
    "Microsoft.ApplicationInsights.AspNetCore": "2.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.1.2",
    "Microsoft.AspNetCore.Mvc": "1.1.3",
    "Microsoft.AspNetCore.Mvc.TagHelpers": "1.1.3",
    "Microsoft.AspNetCore.Razor.Design": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Routing": "1.1.2",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.2",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.2",
    "Microsoft.AspNetCore.StaticFiles": "1.1.2",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.2",
    "Microsoft.Extensions.Configuration.Json": "1.1.2",
    "Microsoft.Extensions.Logging": "1.1.2",
    "Microsoft.Extensions.Logging.Console": "1.1.2",
    "Microsoft.Extensions.Logging.Debug": "1.1.2",
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.1.1"
    },
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.1.0",
    //"Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.1.0-preview4-final",
    //"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": "1.1.1",
    "Wallet.Core": "1.0.0-*"
  },

  "tools": {
    "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final"
  },

  "frameworks": {
    "netcoreapp1.1": {
      "imports": [
        "dnxcore50"
      ]
    }
  },

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

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

答案 6 :(得分:0)

我注意到,由于@MayBeNextTime告知我们,标签帮助程序仅对某些视图有所帮助。尽管@Menace建议将_ViewImports文件的副本添加到您拥有视图的每个区域中,但为了使标记助手能够为您的应用程序中的每个视图工作,我发现通过将_ViewImports文件移动到主应用程序文件夹中(位于解决方案资源管理器中Program.cs,Startup.cs,appsettings.json旁边/或上方),您将无需使用应用程序中的重复文件即可实现普遍存在的标签助手功能。

检查一下:

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/layout?view=aspnetcore-2.2

它说:

_ViewImports.cshtml文件可以放在任何文件夹中,在这种情况下,它将仅应用于该文件夹及其子文件夹中的页面或视图。

答案 7 :(得分:0)

这是最明智的竞争者,它使Tag Helpers轻视了您。尝试注释掉单个HTML属性...

<input id='@Model.InputId.Records[0].TenantId'
        class='class-1'
        @*class='class-2'   THIS WILL NEGATE THE asp-for ATTRIBUTE BELOW *@
        asp-for="@Model.Records[0].TenantId"
        type='text'
        placeholder='Required.' />

答案 8 :(得分:0)

如果您已经有了 _ViewImports.cshtml 文件 如果您在“WebHost/Features/MyFolder/Views/SampleView.cshtml”等其他文件夹结构中有视图,而不是在 WebHost/Views

然后将您的 _ViewImports.cshtml 文件移动到项目文件夹中。像 WebHost/_ViewImports.cshtml

现在它应该适用于所有视图。

答案 9 :(得分:0)

就我而言,我将 viewimport.cshtml 添加到 Pages=>shared 并且它不起作用。我将它移到 Pages,现在它可用于所有视图。所以它有效。