3

我想在 C# 中创建一个自定义控件,我将在我的应用程序中多次使用它,但不太可能在任何其他应用程序中使用。我看过几个网站,它们解释了如何创建自定义控件并将其添加到 Visual Studio 工具箱中。他们指示您使用可编译为 DLL 的自定义控件创建一个项目,然后为应用程序创建一个新项目并在工具箱中添加对该 DLL 的引用。但是,我宁愿我的应用程序是一个不依赖于 DLL 的单个可执行文件。有没有办法将自定义控件和应用程序放在一个项目中,并且自定义控件仍然出现在 Visual Studio 工具箱中?或者,如果无法将控件添加到工具箱,是否有另一种方法可以在应用程序的设计器中查看控件?

4

1 回答 1

2

该技术在:

  1. 要开发您的项目,您可以像往常一样使用您的组件(意味着将其作为 DLL 添加到工具箱中并在您的项目中引用它)。

  2. 要在一个 exe 文件中内部使用您的 dll,您应该将它(原始的或压缩的)添加到项目的资源中。

  3. 在 Main 方法中订阅 AppDomain.AssemblyResolve 事件:

    public static void Main( string[] args )
    {            
        AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve;    
    }
    
  4. 在事件处理程序中,您应该使用您的组件解析程序集:

    private static Assembly AppDomain_AssemblyResolve( object sender, ResolveEventArgs args )
        {
            if( args.Name.Contains( "YourComponent" ) )
            {           
                using( var resource = new MemoryStream( Resources.YourComponent ) )
                    return Assembly.Load( resource.GetBuffer() );
            }
    
            return null;
        }
    

然后您的应用程序将使用从您的 exe 中提取的此程序集,但您仍然可以在开发时使用工具箱中的组件。

请注意,每次更改组件时都应在资源中更新它。

于 2010-07-28T21:50:53.693 回答