更新依赖项会破坏tagPrefix

时间:2020-01-27 15:48:51

标签: c# asp.net webforms

我有一个WebForms站点,该站点在当前状态下工作正常。它的一个第三方依赖项发布了一个安全补丁,所以我从Nuget进行了更新,突然间事情崩溃了。

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

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

在更新之前,那里没有问题。现在,这是错误的:

未知服务器标签'Creator:CoolComponent'

web.config中的相关行显示:

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

程序集上没有强名,并且我已经验证Creator.Foo.CoolComponent仍然存在,确切地应该存在。据我所知,这里什么都不会中断。但显然编译器不同意!

我在SO上可以找到的有关此错误的所有问题似乎都涉及您自己创建的组件,并使用<%@ Register %>标签对其进行注册。这是一个第三方组件,并且是在更新之前可以正常工作的引用,因此似乎不适用任何引用。

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

1 个答案:

答案 0 :(得分:1)

未知服务器标签'Creator:CoolComponent'

如果看到此错误,则可以解决相应的程序集/名称空间的问题,但是,CoolComponent类/组件没有必要的工具箱属性。

否则,您可能会看到与解析程序集/名称空间有关的错误。

此错误似乎与您自己创建的组件有关,并使用<%@ Register%>标签进行注册

这种差异(在页面上注册自定义tagprefix与Web.config相比)只是在单个页面上注册tagprefix的一种方法(实际上-运行起来更快),而在全局范围内。

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

打开自定义的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);
    }
}

您看到这堂课吗?是否可以创建其实例并以编程方式添加到表单中?该控件是否按应有的方式呈现?

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

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

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