我想在C#中创建一个自定义控件,该控件将在我的应用程序中多次使用,但不太可能在其他任何应用程序中使用。我看过几个网站,它们解释了如何创建自定义控件并将其添加到Visual Studio工具箱中。他们指导您使用可编译为DLL的自定义控件创建一个项目,然后为该应用程序创建一个新项目,并在工具箱中添加对该DLL的引用。但是,我宁愿我的应用程序是不依赖DLL的单个可执行文件。有没有一种方法可以将自定义控件和应用程序放在一个项目中,并且仍使自定义控件出现在Visual Studio工具箱中?或者,如果无法将控件添加到工具箱中,还有其他方法可以在应用程序的设计器中查看控件吗?
最佳答案
该技术在:
要开发项目,您可以像往常一样使用组件(意味着将其作为DLL添加到工具箱中,并在项目中对其进行引用)。
要在一个exe文件中内部使用您的dll,您应将其(原始文件或压缩文件)添加到项目资源中。
在Main方法中,订阅AppDomain.AssemblyResolve事件:
public static void Main( string[] args )
{
AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve;
}
在事件处理程序中,您应该使用组件解析程序集:
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中提取的程序集,但是在开发过程中,您仍然可以使用工具箱中的组件。
请注意,每次更改组件时,都应在资源中对其进行更新。
关于c# - 同一项目中的自定义控件和应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3357568/