我遇到一些asp.net核心没有找到并调用我的标记助手的问题。在我将taghelpers从单独的程序集( LC.Tools.Utility.TagHelpers )移动到 LC.Tools.Utility 之后,即使名称空间是名称,它们似乎也未被发现和以前一样。
示例cshtml :
<lc:css src="styles.min.css" />
<lc:css src="styles.bootstrap.min.css" />
<lc:css src="styles._layout.min.css" />
查看页面的来源时,标签完全相同。
_ViewImports.cshtml :
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, LC.Smokers.Albino.TagHelpers
@addTagHelper *, LC.Tools.Utility.TagHelpers
LC.Tools.Utility.TagHelpers.IncludeCssTagHelper.cs ( in assembly LC.Tools.Utility ):
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace LC.Tools.Utility.TagHelpers
{
[HtmlTargetElement("lc:css", Attributes = "src", TagStructure = TagStructure.WithoutEndTag)]
public class IncludeCssTagHelper : Base
{
public IncludeCssTagHelper(IHostingEnvironment env) : base(env) { }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "link";
output.TagMode = TagMode.SelfClosing;
bool isDebug = this.Environment.IsDevelopment() && this.DebugSrc.Length > 0;
string path = "/CSS/";
if (isDebug)
{
path += this.DebugSrc;
if (Utility.IsUrl(this.DebugSrc))
{
path = this.DebugSrc;
}
}
else if (!string.IsNullOrEmpty(this.Src))
{
path += this.Src;
if (Utility.IsUrl(this.Src))
{
path = this.Src;
}
}
output.Attributes.Clear();
output.Attributes.SetAttribute("href", path.ToLower());
output.Attributes.SetAttribute("rel", "stylesheet");
output.Attributes.SetAttribute("type", "text/css");
base.Process(context, output);
}
[HtmlAttributeName("src")]
public string Src { get; set; }
[HtmlAttributeName("debug-src")]
public string DebugSrc { get; set; } = string.Empty;
}
}
我尝试删除所有项目中的bin和obj文件夹 重建整个解决方案并删除并添加引用 项目
有什么想法吗?
答案 0 :(得分:1)
addTagHelper
指令需要两个以逗号分隔的参数。 docs可以说明它是如何运作的:
@addTagHelper之后的第一个参数指定要加载的Tag Helpers(我们使用&#34; *&#34;表示所有Tag Helpers),第二个参数&#34; Microsoft.AspNetCore.Mvc.TagHelpers&# 34;指定包含Tag Helpers的程序集。
请注意我以粗体突出显示的内容:它不是所需的命名空间;这是集会。在您的示例中,您需要更改第二个参数以反映新的主机程序集:
@addTagHelper *, LC.Tools.Utility