asp.net - 将web应用项目ascx编译成dll

标签 asp.net user-controls

是否可以将 Web 应用程序项目 .ascx(用户控件)编译为 dll?

我想做以下事情:

  • 在多个网站中使用相同的控件
  • 将 css 和 .js 作为资源嵌入到控件中
  • 能够 super 轻松地更新。如果用户控件更新,我只想更新 1 个 .dll

  • 我已成功关注这篇文章,http://msdn.microsoft.com/en-us/library/aa479318.aspx .

    但是,那使用网站项目,我不能将 js css 作为资源嵌入到网站项目中。

    有什么想法吗?我这样做是错误的,我应该改变方法吗?

    最佳答案

    转换很容易,甚至可以完全自动化。它只需要更改您希望嵌入 ASCX 控件的 DLL 项目中的一些设置和基类。

    1... 对于每个 UserControl,将 ASCX 文件的 Build Action(在 Properties 下)设置为“Embedded Resource”,并删除其关联的设计器文件。

    2... 保存项目。

    3... 右键单击项目并选择“卸载项目”。

    4... 再次右键单击它并选择“编辑 *.csproj”选项。

    更改如下所示的部分(其中星号代表您的类名):

    <Compile Include="*.ascx.cs">
        <DependentUpon>*.ascx</DependentUpon>
        <SubType>ASPXCodeBehind</SubType>
    </Compile>
    

    看起来像这样
    <Compile Include="*.ascx.cs" />
    

    这将导致代码隐藏文件独立于 ASCX 文件进行编译。

    5... 保存更改,然后右键单击项目并选择“重新加载项目”。

    6... 打开所有“*.ascx.cs”文件并使它们继承自以下自定义 UserControl 类,而不是 System.Web.UI.UserControl 类(您可能需要找到父类才能完成此步骤)。
    public class UserControl : System.Web.UI.UserControl
    {
        protected override void FrameworkInitialize()
        {
            base.FrameworkInitialize();
            string content = String.Empty;
            Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( GetType().FullName + ".ascx" );
            using (StreamReader reader = new StreamReader(stream))
                content = reader.ReadToEnd();
            Control userControl = Page.ParseControl( content );
            this.Controls.Add( userControl );
        }
    }
    

    这个基类将负责加载和解析嵌入的 ASCX 文件。

    7... 最后,您可能需要将 ASCX 文件放在子文件夹中,以便它们的资源名称(由文件夹路径自动确定)与其关联类的完整类型名称(加上“.ascx”)匹配。假设您的根命名空间与您的项目名称匹配,那么名为“ProjectName.Namespace1.Namespace2.ClassName”的类将需要在子文件夹“Namespace1\Namespace2”中的 ASCX 文件,因此它嵌入了名称“ProjectName.Namespace1.Namespace2”。类名.ascx”。

    就是这样!一旦您编译了 DLL 并将其包含在另一个项目中,您就可以像任何其他类一样使用“new”运算符来实例化用户控件的实例。与往常一样,您的控件一旦作为子控件添加到页面或页面上的其他控件,就会“ catch ”到当前页面事件。

    关于asp.net - 将web应用项目ascx编译成dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2806268/

    相关文章:

    c# - 在 MVVM wpf 中切换 View

    c# - 为 Sentinel 配置配置 ASP.NET Redis session 状态提供程序

    c# - 类库中的 Razor,缺少智能感知

    ASP.NET Web API 2 文件上传

    c# - 回发后将不同的控件分配给相同的 ID - ASP.NET

    javascript - 控件加载事件

    c# - LoginUser_Authenticate 和 LoggingIn 事件不会触发

    c# - 无法从 C# 执行 MySql 存储过程

    c# - UserControl 元素由于其保护级别而无法访问

    c# - 使UserControl全屏显示