.NET Windows Forms Controls with Design support work on 4.0 Client Profile
.NET Windows Forms Controls with Design support work on 4.0 Client Profile
考虑场景:
您需要具有设计时支持的 Windows Forms Control。这会创建对 System.Design
的依赖性,而 4.0 客户端配置文件中不存在该依赖性,因此您使用 4.0 完整框架作为控件程序集。
那么在一个你想要使用控件的项目中,它将需要 4.0 Full Framework,即使所需的功能只是用于设计时。
但是,您可以使用具有 Verbs
的 TabControl
和可能扩展 ParentControlDesigner
的设计器,该设计器将控件依赖于 4.0 完整框架,但是您的项目将使用 4.0 客户端配置文件正常编译。
例如,TabControl
有动词和设计器,但在 4.0 Client Profile 上运行良好。
有什么方法可以告诉程序集在设计时只使用引用!?由于这是不可能的,简单地说 any 项目使用 any 控件(带有自定义设计器),依赖于 Full 4.0 框架,但是"native" 来自 .Net 的不是吗?!
这个肯定是真的吗?为什么?
使用仅作为完整框架的 4.5 超出了此问题的范围
好吧,当你有 Form
class 时,它会用 DesignerAttribute
修饰,这在客户端配置文件中可用。
它的定义:
[Designer( "System.Windows.Forms.Design.FormDocumentDesigner, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
, typeof(IRootDesigner)
)
]
IRootDesigner
接口在客户端配置文件中也可用,因此实际上并没有引用完整的框架,只有 string
引用了它,但在编译时不对其进行评估时间。
因此,您不需要完整的框架来使用 Form
class,但您确实需要它来访问设计器。这将读取 string
并尝试加载包含设计器的程序集,这确实需要完整的框架,它在 Visual Studio 安装的系统上始终可用。
如果要自己实现,就得把designer和controlclass拆分在不同的程序集中,参考另一个版本的框架。
考虑场景:
您需要具有设计时支持的 Windows Forms Control。这会创建对 System.Design
的依赖性,而 4.0 客户端配置文件中不存在该依赖性,因此您使用 4.0 完整框架作为控件程序集。
那么在一个你想要使用控件的项目中,它将需要 4.0 Full Framework,即使所需的功能只是用于设计时。
但是,您可以使用具有 Verbs
的 TabControl
和可能扩展 ParentControlDesigner
的设计器,该设计器将控件依赖于 4.0 完整框架,但是您的项目将使用 4.0 客户端配置文件正常编译。
例如,TabControl
有动词和设计器,但在 4.0 Client Profile 上运行良好。
有什么方法可以告诉程序集在设计时只使用引用!?由于这是不可能的,简单地说 any 项目使用 any 控件(带有自定义设计器),依赖于 Full 4.0 框架,但是"native" 来自 .Net 的不是吗?!
这个肯定是真的吗?为什么?
使用仅作为完整框架的 4.5 超出了此问题的范围
好吧,当你有 Form
class 时,它会用 DesignerAttribute
修饰,这在客户端配置文件中可用。
它的定义:
[Designer( "System.Windows.Forms.Design.FormDocumentDesigner, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
, typeof(IRootDesigner)
)
]
IRootDesigner
接口在客户端配置文件中也可用,因此实际上并没有引用完整的框架,只有 string
引用了它,但在编译时不对其进行评估时间。
因此,您不需要完整的框架来使用 Form
class,但您确实需要它来访问设计器。这将读取 string
并尝试加载包含设计器的程序集,这确实需要完整的框架,它在 Visual Studio 安装的系统上始终可用。
如果要自己实现,就得把designer和controlclass拆分在不同的程序集中,参考另一个版本的框架。