我开始怀疑这是否可能。它看起来很简单。
我有一个已发布的网络项目。我想向该发布的网站添加一些 .ascx 文件(带有 .cs 和 Designer.cs 文件)。这些是简单的自定义用户控件,可以访问已经是原始应用程序一部分的方法。
问题?是否可以在不构建整个解决方案的情况下将这些内容放入已发布的 Web 项目中?如果不是为什么?
当我将这些文件放入并运行我的应用程序时,出现错误:“解析错误:无法加载类型'我的自定义控件命名空间的名称'”。
没有太多代码要显示,所以这就是我所拥有的。
默认.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>
自定义控件.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CustomControl.ascx.cs"
Inherits="ApplicationName.Web.Controls.Custom.CustomControl" %>
<asp:PlaceHolder ID="ph1" runat="server></asp:PlaceHolder>
自定义控件.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
}
}
再一次,这似乎很容易。我错过了什么?或者这是不可能的?谢谢。
更新: 我想通了。上述情况是可能的。正如错误消息所暗示的那样,问题不在于名称空间。相反,它是代码隐藏声明。发布应用程序时会编译任何类型文件的代码隐藏文件。我仍然对为什么当您浏览 Web 目录时它似乎是可编辑的感到困惑,我认为它会存储在 .dll 文件或其他文件中。也许有人可以对此有所了解。
无论如何,用代码文件替换代码隐藏可以纠正问题,因为代码文件没有被编译,因此在应用程序运行时是可读的。