簡體   English   中英

Visual Studio .net 核心標簽助手不工作

[英]Visual Studio .net core tag helpers not working

好吧,讓我們開始吧。 我正在使用 Visual Studio 2015 和 ASP.NET 核心標簽助手已經完全停止工作,不知道為什么,因為我沒有改變任何東西。 有一天我在工作,他們工作得很好,然后我第二天就來了,現在沒有 ASP.NET 核心 web 項目根本沒有顯示任何標簽助手?,? 我已經嘗試創建一個全新的 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 的軟件包更新到最新版本...

我終於解決了這個問題,但不知道為什么固定的工作或為什么它首先停止工作但是......

在 _ViewImports 中,該行是:-

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

我已更改為包含引號:-

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

然后我進行了重建並再次工作!?! 所有“asp-”屬性現在也像以前一樣突出顯示。 為什么?!? 誒?!?

更奇怪的是,如果我刪除引號並重建,它仍然有效! 好吧,至少在我的同事將文件從源代碼管理中取出之前,他們必須將引號放回原處!!

想出那個...

對於遇到相同問題的任何人,請檢查_ViewImports.cshtml的位置,它必須在您的視圖的同一文件夾中。 例如,我創建了一個在Pages文件夾中已經有_ViewImports.cshtml文件的項目,但我創建並使用了位於另一個文件夾中的視圖文件,因此 ASP.NET 無法為我們的視圖找到_ViewImports.cshtml

如果有人在查找 project.json 時遇到問題,您可以右鍵單擊該項目並選擇 Manage Nuget Packages,然后安裝Microsoft.AspNetCore.Mvc.TagHelpers

希望這些建議可以幫助到大家。

如果您在使用區域時遇到同樣的問題,請將_ViewImports文件添加到您區域的Views文件夾中

在您的 project.json 依賴項中,您缺少 TagHelpers。 請在 project.json- 的依賴項部分添加以下行

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

在保存 Project.json 時,VS2015 會自動恢復包。

如果它不起作用,則右鍵單擊項目並單擊“恢復包”選項。

如果這不起作用,請嘗試使用 dotnet restore CLI 命令進行恢復。

對於那些在 Razor 類庫 (RCL) 中使用 ViewComponent 的人,除了一些其他已發布的建議之外,還有 3 個額外的調整為我解決了無法訪問的標簽助手:

  1. _ViewImports 文件應該包含一個 @using 指令,指向你的標簽助手 NAMESPACE(即使智能感知會認為它不需要)
  2. _ViewImports 引用 s/b 到@addTagHelper *, <DLL NAME> - 不一定是命名空間名稱
  3. 除了在 web 應用程序根目錄下,_ViewImports 文件還需要存在於 RCL 項目的根目錄中 - 但在 RCL 中的 MVC“區域”或任何“視圖”文件夾中都不需要

我今天有這個 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%" ]
  }
}

我注意到標簽助手僅對某些視圖有所幫助,因為 @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 文件可以放置在任何文件夾中,在這種情況下,它只會應用於該文件夾及其子文件夾中的頁面或視圖。

這是讓 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.' />

如果您已經擁有該 _ViewImports.cshtml 文件如果您在“WebHost/Features/MyFolder/Views/SampleView.cshtml”等其他文件夾結構中有視圖,而不是在 WebHost/Views

然后將您的 _ViewImports.cshtml 文件移動到項目文件夾中。 像 WebHost/_ViewImports.cshtml

現在它應該適用於所有視圖。

就我而言,我將 viewimport.cshtml 添加到 Pages=>shared 並且它不起作用。 我將它移到 Pages,現在它可用於所有視圖。所以它有效。

我的申請也有同樣的問題。 我有參考

@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

在我的_ViewImports.cshtml文件中,但該文件與其他視圖文件一起存在於~/Views/Home/文件夾中,對於同一文件夾中的視圖文件,標簽幫助程序代碼工作正常。

我的_Layout.cshtml文件位於~/Views/Shared/文件夾中。 當我復制_ViewImports.cshtml文件並將副本移動到與_Layout.cshtml相同的文件夾中時,標簽助手代碼開始正常工作。

然后我將_ViewImports.cshtml移動到~/Views/並且標簽助手代碼開始為 ~/Views/Home/ 和 ~/Views/Shared/ 文件夾中的視圖正常工作。

因此解決方案是將_ViewImports.cshtml文件移動到 Views 文件夾 ( ~/Views/ ) 的根目錄,以便所有其他 Views 文件都可以引用它。

我遇到了類似的問題,我的 _ViewImports.cshtml我的 Views 文件夾中。

對我來說,在 _ViewImports.cshtml 文件的底部添加一個額外的行就可以了:

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

在我的核心 3.1 項目中,問題原來是由於連接的 Microsoft.Office.Interop.Word

<ItemGroup>
     <COMReference Include="Microsoft.Office.Interop.Word">
       <WrapperTool>tlbimp</WrapperTool>
       <VersionMinor>6</VersionMinor>
       <VersionMajor>8</VersionMajor>
       <Guid>00020905-0000-0000-c000-000000000046</Guid>
       <Lcid>0</Lcid>
       <Isolated>false</Isolated>
       <EmbedInteropTypes>true</EmbedInteropTypes>
<Private>true</Private>
     </COMReference>
   </ItemGroup>

刪除 Microsoft.Office.Interop.Word 后一切正常,現在我正在尋找替代 Microsoft.Office.Interop.Word 的東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM