C# 管理通过使用';设计师';属性

C# 管理通过使用';设计师';属性,c#,components,designer,windows-forms-designer,design-time,C#,Components,Designer,Windows Forms Designer,Design Time,我们构建了许多组件、WinForms、工作流活动等,我们经常使用的是“Designer”属性。 初始开发过程中的一般做法是,设计器属性与[Designer(typeof(DesignerType))]样式一起使用,以使事情正常工作,然后,将其转换为[Designer(“AssemblyQualifiedTypeName”)],这允许从组件的参考列表中删除设计器DLL-这消除了组件使用者必须将设计器DLL与其产品一起部署的需要。 这种将设计时代码和运行时代码拆分为两个独立DLL的做法是常见的做法,

我们构建了许多组件、WinForms、工作流活动等,我们经常使用的是“Designer”属性。 初始开发过程中的一般做法是,设计器属性与
[Designer(typeof(DesignerType))]
样式一起使用,以使事情正常工作,然后,将其转换为
[Designer(“AssemblyQualifiedTypeName”)]
,这允许从组件的参考列表中删除设计器DLL-这消除了组件使用者必须将设计器DLL与其产品一起部署的需要。 这种将设计时代码和运行时代码拆分为两个独立DLL的做法是常见的做法,我也支持这种做法

一个消极的副作用是,“程序集限定类型名称”将包括设计器dll的程序集版本,因此当版本增加时,必须在整个产品中执行“搜索和替换”,以确保它们已更新对此设计器的所有“松散引用”

最后,我的问题是: 有谁能推荐一种不依赖于“搜索和替换”的最佳实践,它可以管理所有这些引用,以确保它们始终是最新的? 我们经常会让一个懒惰的开发人员忘记更新引用字符串,从而导致组件的新版本链接到设计器DLL的前一个版本-当然没有部署,因此设计时支持丢失。 也许是某种形式的pragmas、宏、构建脚本、魔法属性,我不知道,但肯定有更好的方法


有人吗?(谢谢)

为什么不创建一个单独的设计器,在内部使用托管加载项框架或Activator.CreateInstance之类的东西来选择和显示设计器?使用此技术,设计器属性将永远不必更改

为什么不创建一个单独的设计器,在内部使用托管加载项框架或Activator.CreateInstance之类的东西来选择和显示设计器?使用此技术,设计器属性将永远不必更改

像微软那样做。查看Reflector中的AssemblyRef类(System.Windows.Forms.dll)。

像Microsoft那样操作。查看Reflector中的AssemblyRef类(System.Windows.Forms.dll)。

为什么要增加设计器的[AssemblyVersion]?这没有任何意义,你不部署它们。嗨,汉斯,我们正在构建开发人员组件,并将其作为SDK销售,因此我们将组件DLL和设计器DLL提供给我们的客户,他们使用这些组件来构建产品,他们(反过来)将组件与产品一起部署。由于组件可能安装了两个或更多版本的SDK,因此组件需要加载正确版本的设计器,因此设计器DLL也需要进行版本控制。为什么要增加设计器的[AssemblyVersion]?这没有任何意义,你不部署它们。嗨,汉斯,我们正在构建开发人员组件,并将其作为SDK销售,因此我们将组件DLL和设计器DLL提供给我们的客户,他们使用这些组件来构建产品,他们(反过来)将组件与产品一起部署。因为他们可能安装了两个或多个版本的SDK,组件需要加载正确版本的设计器,因此,设计器DLL也需要进行版本控制。嗨,Alex-我们如何做到这一点?“DesignerAttribute”由Visual Studio根设计器(即表单设计器或WF活动设计器)读取。因此,DesignerAttribute是一个必要的恶魔,而且(据我所知)无法在Visual Studio和组件之间穿插。当VS或WF设计器看到您已将该属性应用于一个类时,它将实际创建该类的实例并使用它。您之所以知道这一点,是因为您编写的自定义设计器按预期工作。但是,您可以编写代码,根据某些配置设置动态创建类的实例,而不是显示UI。除了MAF或Activator.CreateInstance,您还可以使用诸如Spring.NET或Unity之类的工具。对不起,Alex,我理解您所描述的内容,但不知道如何实现这一点。VisualStudio创建DesignerAttribute“引用”的设计器实例(它必须是设计器),我无法控制它使用它做什么。。。这通常是为了在设计窗口中显示它。你能用伪代码解释一下你的意思吗?嗨,亚历克斯-我们怎么解释?“DesignerAttribute”由Visual Studio根设计器(即表单设计器或WF活动设计器)读取。因此,DesignerAttribute是一个必要的恶魔,而且(据我所知)无法在Visual Studio和组件之间穿插。当VS或WF设计器看到您已将该属性应用于一个类时,它将实际创建该类的实例并使用它。您之所以知道这一点,是因为您编写的自定义设计器按预期工作。但是,您可以编写代码,根据某些配置设置动态创建类的实例,而不是显示UI。除了MAF或Activator.CreateInstance,您还可以使用诸如Spring.NET或Unity之类的工具。对不起,Alex,我理解您所描述的内容,但不知道如何实现这一点。VisualStudio创建DesignerAttribute“引用”的设计器实例(它必须是设计器),我无法控制它使用它做什么。。。这通常是为了在设计窗口中显示它。你能用伪代码解释一下你的意思吗?