如何为控件库编译生成.design.dll以实现设计时支持?
解决WinForms控件库.design.dll设计时文件编译问题
先检查解决方案结构:旧控件库的设计时代码通常会拆分成单独的类库项目(命名一般是
[你的控件库名].Design),先确认这个项目是否还在解决方案中,有没有被设为不参与构建(右键项目→属性→生成→确认勾选“生成”)。如果项目被误删,可从代码主干里找回对应的设计时代码文件,新建一个类库项目承载。核对设计时代码的编译条件:如果设计时代码和运行时代码在同一个项目里,检查代码中是否有条件编译指令(比如
#if DESIGN_TIME),确保项目属性里的“条件编译符号”已经添加对应的符号(右键项目→属性→生成→条件编译符号)。同时确认设计器相关类(比如继承自ControlDesigner的类、ToolboxItem实现类)的生成操作是“编译”(右键文件→属性→生成操作)。配置设计时项目的引用与输出:
- 设计时项目必须引用你的核心控件库dll,还要引用
.NET Framework下的System.Design.dll(WinForms设计时依赖该程序集); - 在设计时项目的属性→生成→输出里,将输出文件名设置为
[你的控件库名].Design.dll,保证命名符合设计器的识别规则。
- 设计时项目必须引用你的核心控件库dll,还要引用
统一强签名密钥:因为旧设计时dll和当前编译的控件库令牌不一致,是因为签名密钥不同。找到项目原本的强名称密钥文件(
.snk),在核心控件库和设计时项目的属性→签名里,勾选“为程序集签名”,选择对应的.snk文件,确保两个项目用同一密钥编译,生成的dll令牌就会一致。编译并部署到GAC:编译两个项目后,用
gacutil /i [核心控件库路径]和gacutil /i [设计时dll路径]命令将文件安装到GAC,重启Visual Studio后就能在设计器中正常加载控件的设计时支持。
内容的提问来源于stack exchange,提问作者M_Lyons10
相关产品推荐
相关产品推荐

