【问题标题】:_ViewImports unable to resolve assembly containing custom tag helpers_ViewImports 无法解析包含自定义标签助手的程序集
【发布时间】:2017-07-14 00:59:44
【问题描述】:

内置Microsoft.AspNetCore.Mvc.TagHelpers 工作得很好,但是,每当我尝试导入我已经构建的自定义标签助手时,调试时都会出现以下错误:

我尝试从构建在 asp.net 核心项目的根目录中的类以及构建到 asp.net 核心项目外部的类库中的类导入。下面是自定义标签助手的相关代码:

RepeatTagHelper.cs(在 ASP.NET Core 项目根目录中)

using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Threading.Tasks;

namespace mvc_form
{
    /// <summary>
    /// <repeat count-of-things="5">HTML</repeat>
    /// </summary>
    public class RepeatTagHelper : TagHelper
    {
        public int CountOfThings { get; set; }

        public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            for (var i = 0; i < CountOfThings; i++)
            {                
                output.Content.AppendHtml(await output.GetChildContentAsync(useCachedResult: false));
            }
        }
    }
}  

RepeatTagHelper.cs(在 .NET Core 类库中)

using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace core_resources.TagHelpers
{
    /// <summary>
    /// <repeat count-of-things="5">HTML</repeat>
    /// </summary>
    public class RepeatTagHelper : TagHelper
    {
        public int CountOfThings { get; set; }

        public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            for (var i = 0; i < CountOfThings; i++)
            {
                output.Content.AppendHtml(await output.GetChildContentAsync(useCachedResult: false));
            }
        }
    }
}  

_ViewImports.cshtml(在引用 ASP.NET Core 项目中定义的标签助手时

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

_ViewImports.cshtml(引用类库中定义的标签助手时)

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

我已将完整解决方案添加到GitHub

【问题讨论】:

  • 你是否从web项目中引用了类库项目?
  • 我有:project.json 第 49 行

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

使用您当前的设置,生成的 .dll 文件名为:core-resources.dll

所以你需要这样注册:

@addTagHelper *, core-resources

或者为core-resources项目定义一个自定义outputName

 "buildOptions": {
        "outputName": "core_resources"
    },

然后以这种方式使用这个新名称:

@addTagHelper *, core_resources

【讨论】:

  • 非常感谢您的帮助!这真的很令人困惑,因为 Visual Studio 在所有命名空间中都用下划线替换了破折号,并且 _ViewImports 中的所有 using 语句都使用了下划线约定。我想我可能应该坚持使用 PascalCase 命名。最近在 Angular 上花费了太多时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多