当前位置: 代码迷 >> .NET组件控件 >> 用户控件能否生成dll,该怎么解决
  详细解决方案

用户控件能否生成dll,该怎么解决

热度:2282   发布时间:2013-02-25 00:00:00.0
用户控件能否生成dll
c#中写了一个用户控件,但是想保存下来,不知道能否生成dll,方便调用?还请各位高手指点。

------解决方案--------------------------------------------------------
可以。 把它单独 拿到一个项目里 然后编译那个项目就可以了。 
然后要使用时在 添加部件 里 去 选择哪个文件就行了。 工具箱里就有了。 记住, 不要去引用菜单,那样工具箱里显示不出来
------解决方案--------------------------------------------------------
可以不过要建立 Web 应用程序(VS2005 SP1里有),而不是2005默认的那个 Web网站
1)建立一个ASP.NET Web应用程序
2) 建立一个 ASCX 作好

编译

用的时候需要把这个 ASCX 和 dll copy 到你要用到的这控件的工程里(cs不用带)
不过 ASCX 必须带着!

还有一种变法,用Web网站
作 ascx 然后发布网站
然后反编译那个工程把里边那个生成完的用户控件扣出来(这个方法没实验过、楼主自己实验吧)。
反编译后会看见类似这样的代码、很容易看懂的
C# code
public class WebUserControl : UserControl{    // Fields    protected Label Label1;    // Methods    protected void Page_Load(object sender, EventArgs e)    {        this.Label1.Text = DateTime.Now.ToString();    }    // Properties    protected HttpApplication ApplicationInstance    {        get        {            return this.Context.ApplicationInstance;        }    }    protected DefaultProfile Profile    {        get        {            return (DefaultProfile) this.Context.Profile;        }    }}/*其实最终用的是这个,整个控件的初始化都在这里copy出来改改作成,自定义控件也可以省的自己手敲那些添加控件的代码*/public class webusercontrol_ascx : WebUserControl{    // Fields    private static bool __initialized;    // Methods    public webusercontrol_ascx()    {        base.AppRelativeVirtualPath = "~/WebUserControl.ascx";        if (!__initialized)        {            __initialized = true;        }    }    private Label __BuildControlLabel1()    {        Label __ctrl = new Label();        base.Label1 = __ctrl;        __ctrl.ApplyStyleSheetSkin(this.Page);        __ctrl.ID = "Label1";        __ctrl.Text = "Label";        IParserAccessor __parser = __ctrl;        __parser.AddParsedSubObject(new LiteralControl("1212"));        return __ctrl;    }    private void __BuildControlTree(webusercontrol_ascx __ctrl)    {        Label __ctrl1 = this.__BuildControlLabel1();        IParserAccessor __parser = __ctrl;        __parser.AddParsedSubObject(__ctrl1);    }    protected override void FrameworkInitialize()    {        base.FrameworkInitialize();        this.__BuildControlTree(this);    }}
------解决方案--------------------------------------------------------
只要设置一下项目属性中的输出选项就可以了,我平时也做了一些Web和Window的Dll
  相关解决方案