更新依赖关系中断 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 { }
}
我有一个在当前状态下运行良好的 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 { }
}