我开始怀疑这是否可能。它看起来很简单。
我有一个已发布的网络项目。我想在发布的网站上添加一些.ascx文件(带.cs和amp; designer.cs文件)。这些是简单的自定义用户控件,可以访问已经属于原始应用程序的方法。
的问题?是否可以在发布的Web项目中删除它们而不构建整个解决方案?如果不是为什么?
当我删除这些文件并运行我的应用程序时,我收到错误: “解析错误:无法加载'我的自定义控件命名空间的名称'”。
没有很多代码可以显示,所以这就是我所拥有的。
Default.aspx的
<%@ Page Language="C#" MasterPageFile="~/MasterPages/TwoColumn.master" AutoEventWireup="true"
Inherits="ApplicationName.Web.Default" CodeBehind="Default.aspx.cs" %>
<%@ Register TagPrefix="uc1" TagName="CustomControl" Src="~/Controls/Custom/CustomControl.ascx" %>
<asp:Content ID="content" contentplaceholder="cph" runat="Server">
<uc1:CustomControl ID="cc1" runat="server" CustomProperty="Hello World" />
</asp:Content>
CustomControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CustomControl.ascx.cs"
Inherits="ApplicationName.Web.Controls.Custom.CustomControl" %>
<asp:PlaceHolder ID="ph1" runat="server></asp:PlaceHolder>
CustomControl.ascx.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ApplicationName.Web.Controls.Custom
{
public partial class CustomControl : System.Web.UI.UserControl
{
///My logic
}
}
再次看起来很容易。我错过了什么?或者这不可能吗?感谢。
更新 我想通了。上述情况是可能的。问题不在于错误消息所暗示的名称空间。相反,它是代码隐藏声明。发布应用程序时会编译任何类型文件的代码隐藏文件。我仍然感到困惑的是,为什么当你浏览网页目录时它似乎是可编辑的,我认为它将存储在.dll文件或其他东西中。也许有人可以对此有所了解。
无论如何,用代码文件替换代码隐藏可以解决问题,因为代码文件没有编译,因此在应用程序运行时是可读的。
答案 0 :(得分:0)
这是可能的,但你仍然需要编译你的用户控件并将该dll放入应用程序的正确bin目录中。这通常是您描述的类型加载错误的原因。
答案 1 :(得分:0)
这种做法可能很草率,你基本上都是
您是否考虑过更简洁的方法,只创建一个继承自System.Web.Ui.Control的类,然后在.common项目中添加它?然后把它拉进corrct项目?您的方法的问题在于预编译和部署,您最终可能会尝试将两个用户控件放入同一文件夹中,这会破坏构建....
替代方法(以及微软方式)将是这样的......
代码 - 编写自定义控件
namespace MyProject.Common.Controls
{
public class PolicyTab : System.Web.UI.Control
{
protected override void CreateChildControls()
{
base.CreateChildControls();
HtmlGenericControl policyTab = new HtmlGenericControl();
policyTab.InnerHtml = "<strong> Some policy code here! </strong>";
this.Controls.Add(policyTab);
}
}
}
页面参考 - 如何在UI项目中引用它
<CommonControls:PolicyTab runat="server" ID="temp"></CommonControls:PolicyTab>
Web.config - 您需要将此控件导入所有UI页面
<add tagPrefix="CommonControls" namespace="MyProject.Common.Controls" assembly="MyProject.Common"/>