更新依赖关系中断 tagPrefix

Updating dependency breaks tagPrefix

我有一个在当前状态下运行良好的 WebForms 站点。它的一个第三方依赖项发布了一个安全补丁,所以我从 Nuget 更新,突然事情就坏了。

在一个页面上,有一个组件标签:

<Creator:CoolComponent ID="CoolControl" Width="100%" Height="600" runat="server" />

更新前,没有问题。现在,它出错了:

Unknown server tag 'Creator:CoolComponent'

web.config中的相关行说:

<add tagPrefix="Creator" assembly="Creator.Foo" namespace="Creator.Foo" />

程序集上没有强名称,而且我已经确认 Creator.Foo.CoolComponent 仍然存在,而且它应该在的位置。据我所知,这里应该没有任何问题。但显然编译器不同意!

我能在 SO 上找到的关于此错误的所有问题似乎都涉及您自己创建的组件,并使用 <%@ Register %> 标记注册它们。这是一个第三方组件,并且是在更新之前正常工作的参考,因此似乎不适用。

这种情况的明显问题通常是 Creator.Foo.dll 的更新版本由于某种原因没有加载,但当发生这种情况时,它通常会产生编译器警告。这里没有警告,所以我不知道下一步应该做什么。有人知道如何解决这个问题吗?

Unknown server tag 'Creator:CoolComponent'

如果看到这个错误,可能是对应的assembly/namespace已经解决了,但是CoolComponentclass/component没有必要的toolbox属性

否则,您可能会看到与解析 assembly/namespace.

相关的错误

this error seem to involve components you created yourself, and registering them with a <%@ Register %> tag

这种差异(在页面上注册自定义标签前缀与 Web.config)只是为单个页面注册标签前缀(在实践中 - 工作速度更快)与全局注册标签前缀的一种方式。

但是,出于调试目的,最好在页面指令中进行测试:

打开自定义 Creator 标签前缀并检查建议的(智能感知)标签:

<%@ Page ...%>
<%@ Register TagPrefix="Creator" Assembly="Creator.Foo" Namespace="Creator.Foo" %>
...
<html ...>
<body>
    <form ... runat="server">
    <Creator:ANYTHING_HERE_? />
    </form>
</body>
</html>

你看到必要的控制了吗?还有其他控件吗?

然后,尝试在代码中创建这个控件:

using System;
using System.Web.UI;
using Creator.Foo;

public partial class YOUR_PAGE_CLASS_HERE : Page {
    protected void Page_Init(object sender, EventArgs e) {
        CoolComponent c = new CoolComponent();
        c.ID = "CoolControl";
        Form.Controls.Add(c);
    }
}

你看到这个 class 了吗?是否可以创建它的实例并以编程方式添加到表单中?此控件是否按应有的方式呈现?

如果您正确看到 CoolComponent,请导航至其定义(通过 F12)键。检查相应的 class 属性。您看到与 ToolboxItem 相关的内容了吗?

using System;
using System.ComponentModel;
using System.Web.UI.WebControls;

namespace Creator.Foo {
    [ToolboxItem(true)]
    public class CoolComponent : WebControl { }
}