是否可以将 Web 应用程序项目 .ascx(用户控件)编译为 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/