cjb*_*kha 11 asp.net user-controls
是否可以将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>
Run Code Online (Sandbox Code Playgroud)
看起来像这样
<Compile Include="*.ascx.cs" />
Run Code Online (Sandbox Code Playgroud)
这将导致代码隐藏文件独立于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 );
}
}
Run Code Online (Sandbox Code Playgroud)
该基类将负责加载和解析嵌入的ASCX文件.
7 ...最后,您可能需要将ASCX文件放在子文件夹中,以便它们的资源名称(由文件夹路径自动确定)与其关联类的完整类型名称(加上".ascx")匹配.假设您的根命名空间与您的项目名称匹配,那么名为"ProjectName.Namespace1.Namespace2.ClassName"的类将需要其子文件夹"Namespace1\Namespace2"中的ASCX文件,因此它将嵌入名称"ProjectName.Namespace1.Namespace2". ClassName.ascx".
就是这样!编译DLL并将其包含在另一个项目中后,您可以使用"new"运算符实例化用户控件的实例,就像任何其他类一样.与往常一样,一旦作为子控件添加到页面或页面上的另一个控件,您的控件将"捕获"到当前页面事件.
| 归档时间: |
|
| 查看次数: |
14020 次 |
| 最近记录: |