C# 更新依赖项中断标记前缀

C# 更新依赖项中断标记前缀,c#,asp.net,webforms,C#,Asp.net,Webforms,我有一个WebForms站点,在当前状态下运行良好。它的一个第三方依赖项发布了一个安全补丁,所以我从Nuget更新了它,突然间事情发生了变化 在一个页面上,有一个组件标记: <Creator:CoolComponent ID="CoolControl" Width="100%" Height="600" runat="server" /> 在更新之前,这里没有问题。现在,它出错了: 未知的服务器标记“创建者:CoolComponent” web.config中的相关行显示: &

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

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

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

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

未知的服务器标记“创建者:CoolComponent”

web.config中的相关行显示:

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

程序集上没有强名称,我已经验证了
Creator.Foo.CoolComponent
仍然存在,它应该在哪里。据我所知,这里不应该有任何东西断裂。但显然编译器不同意

关于这个错误,我能找到的所有问题似乎都涉及到您自己创建的组件,并用
标记注册它们。这是一个第三方组件,并且是一个在更新之前正常工作的引用,因此它似乎不适用于任何情况

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

未知的服务器标记“创建者:CoolComponent”

如果您看到此错误,可以认为相应的程序集/命名空间已解析,但是CoolComponent类/组件没有必要的工具箱属性

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

此错误似乎涉及您自己创建的组件,并使用标记注册它们

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

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

打开自定义Creator标记前缀并检查建议的(intellisense)标记:

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

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

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

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

你可以发布实际组件是什么,最初使用了什么版本,更新到了什么版本吗?你试过Fuslogvw吗?谢谢!在
Page_Init
中创建它终于让我找到了问题所在:新版本改变了我下面的内容。类型名仍然存在,但它不再是
控件
,因此它不会显示在页面上。一旦我知道要找什么,找到合适的类型就很简单了。
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);
    }
}
using System;
using System.ComponentModel;
using System.Web.UI.WebControls;

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