是否可以将Web应用程序项目.ascx(用户控件)编译为dll?
我想做以下事情:
我已成功完成了这篇文章http://msdn.microsoft.com/en-us/library/aa479318.aspx。
但是,它使用网站项目,我无法将js css作为资源嵌入到网站项目中。
有什么想法吗?如果我改变方法,我是否会犯这个错误?
答案 0 :(得分:6)
转换很简单,甚至可以完全自动化。它只需要更改您想要嵌入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”。 ClassName.ascx”。
就是这样!编译DLL并将其包含在另一个项目中后,您可以使用“new”运算符实例化用户控件的实例,就像任何其他类一样。与往常一样,一旦作为子控件添加到页面或页面上的其他控件,您的控件将“捕获”到当前页面事件。
答案 1 :(得分:3)
由于标记ascx文件,很难以这种方式使用用户控件。如果你想创建可重用的控件库,你最好不要创建自定义控件。
答案 2 :(得分:1)
另一种方法是将用户控件转换为自定义控件。 MSDN: Turning an .ascx User Control into a Redistributable Custom Control上有一篇很好的文章,它描述了如何做到这一点。以下是摘要:
- 像往常一样编写用户控件,通常使用Visual Studio设计器。
- 在尝试部署之前使用简单页面对其进行测试。
- 部署应用程序以预编译它。
- 抓取部署步骤生成的用户控件的程序集, 而且你基本上已经完成了:你有自定义控件。
- 最后,以与您相同的方式在其他应用中使用自定义控件 总是使用自定义控件。
醇>
希望这有帮助。
答案 3 :(得分:0)
我必须这样做一次并且我遵循了这篇文章
http://www.codeproject.com/KB/user-controls/EmbeddedUserControl.aspx
它基于在不同位置(程序集,数据库等)安装虚拟文件系统的可能性
答案 4 :(得分:0)
有很多关于如何做到这一点的文章:
http://www.nathanblevins.com/Articles/Compile-a-Web-User-Control-into-a-DLL-.Net-c-.aspx
http://blogs.msdn.com/davidebb/archive/2005/10/30/487160.aspx
答案 5 :(得分:0)
我知道这是旧的,但是可能的是......我一直这样做,请参阅https://kocubinski.wordpress.com/2013/05/06/compile-asp-net-webforms-ascx-usercontrols-into-assembly-for-re-use/