当我尝试发布网站时,我遇到了问题。 我在visual studio 2008 sp1。
我有一堆用户控件,在几页上我以编程方式使用它们。
我在aspx页面上有一个参考
<%@ Reference Control="~/UserControls/Foo.ascx" %>
然后在代码behing上我使用
ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx");
如果我导航到页面它工作正常,但是当我转到发布网站时,我得到编译时错误。
答案 0 :(得分:6)
唉,我在同一个问题上的开发时间正在减少。有人有解决方案吗?
BTW:如果取消选中“允许此预编译站点可更新”,则会构建它(右键单击网站,选择“属性页”,“MSBuild选项”)
但我需要网站可以更新。
答案 1 :(得分:2)
我遇到了同样的问题 - 实际上,在我的情况下,我可以让它来编译和构建我的网站,但在进行自动构建时它会非常爆炸。
尝试按以下方式更换代码:
ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx");
带
USERCONTROLS_Foo newFoo control = (USERCONTROLS_Foo)Page.LoadControl("~/UserControls/Foo.ascx");
(大写将基于您的目录名称/控件名称的大小写 - 但在任何一种情况下都应该适当地突出显示。)
答案 2 :(得分:1)
为用户控制指定命名空间(请参阅Dynamically Load a user control (ascx) in a asp.net website)。
答案 3 :(得分:1)
我找到了解决方案。如果我将在用户定义的命名空间中声明控件,那么我可以直接使用控件而无需使用ASP或将其引用到aspx页面。
答案 4 :(得分:0)
这可能与特定类型无法使用有关。您可以更改控件引用,以便类型和强制转换只使用基本Control类:
Control control = Page.LoadControl("~/UserControls/Foo.ascx");
答案 5 :(得分:0)
是的,我可以将它投射到Control。但后来我失去了对usercontrol方法的直接访问权限。
我知道我可以通过反映到控件中来访问这些方法,并且我已经成功地完成了这项操作,但是访问网站上的所有其他用户控件远非理想。
此外,后续错误是它无法找到标记上的用户控件
<%@ Register src="CategoryRows.ascx" tagname="CategoryRows" tagprefix="abc" %>
<abc:CategoryRows ID="CategoryRows" runat="server" />
请注意,如果我基本上XCopy整个站点(源代码和所有站点),我可以在本地和服务器上成功运行站点。但是Publish失败了。
答案 6 :(得分:0)
转换用户控件可能会产生很多问题。我的方法是创建一个类(比如控件类),在转换后放置所需的所有属性和方法,并从System.Web.UI.UserControl继承这个类。然后在你的用户cotrol代码文件而不是System.Web.UI.UserControl用户此控件类。
现在只需要使用此类进行强制转换。它也将是轻型铸造。
答案 7 :(得分:0)
请检查:
你有website.publishproj
档吗?
如果存在,则删除并再次尝试并发布代码。