Winforms resource resx文件中的强命名程序集引用 情景

Winforms resource resx文件中的强命名程序集引用 情景,winforms,visual-studio,resources,windows-forms-designer,strongname,Winforms,Visual Studio,Resources,Windows Forms Designer,Strongname,GreatLib.dll的供应商部署了一个自定义控件。它正在客户Winforms应用程序中使用。GreatLib具有强名称并公开了一些类型。当这些类型在客户窗体中用作公共属性时,它们也可以在Windows窗体设计器中使用。这里是争论的起点: 设计器将在表单的资源文件中为所有这些类型创建项,并序列化这些项中的默认(?)值。由于GreatLib是强名称,因此引用将包括程序集的完全限定名。(我认为这就是Resgen的工作?)。这些项目可能如下所示: <data name="vector3Cont

GreatLib.dll的供应商部署了一个自定义控件。它正在客户Winforms应用程序中使用。GreatLib具有强名称并公开了一些类型。当这些类型在客户窗体中用作公共属性时,它们也可以在Windows窗体设计器中使用。这里是争论的起点:

设计器将在表单的资源文件中为所有这些类型创建项,并序列化这些项中的默认(?)值。由于GreatLib是强名称,因此引用将包括程序集的完全限定名。(我认为这就是Resgen的工作?)。这些项目可能如下所示:

<data name="vector3Control1.value" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
    AAEAAAD/////AQAAAAAAAAAMAgAAAFRJTE51bWVyaWNzLCBWZXJzaW9uPTQuMi41MzM4LjQ4MDIxLCBD
    dWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPThkOWJmNTBlZjg1NDczNGQFAQAAABpJTE51bWVy
    aWNzLkRyYXdpbmcuVmVjdG9yMwMAAAADbV94A21feQNtX3oAAAALCwsCAAAAAAAAAAAAAAAAAAAACw==
</value>
</data>
问题 供应商提供对GreatLib的更新,客户用新版本替换旧版本。但是资源文件将保持不变!因此,我们要么在Designer.cs代码上获得InvalidCastExection,要么(如果再也找不到旧程序集)获得FileNotFoundException

在resx文件中处理强名称的推荐方法是什么

通过使用

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

??或者在每次更新时手动将base64数据转换为?

只需将该字符串馈送到Convert.FromBase64String()。您会发现,只有在项目中引用了ILNumerics.Drawing.Vector3类的版本4.2.5338.48021时,它才会起作用。你这样做的几率约为48021分之一。当你问这个问题时为零。你有什么建议?防止强名称、使用设计器、创建或更新控件库?@Hans Passant奇怪的是,这基本上会影响到每个控件库供应商。他们有几篇关于这个问题的长篇知识库文章——尽管没有真正的解决方案。有些公司提供了他们自己的更新工具,这些工具可能会按照你的建议去做。一个信誉良好的控制供应商不这样做,他们非常小心地管理他们的版本号,而且永远不会考虑自动生成一个。抱歉,“我不懂。”这与问题有什么关系?声誉良好与否-是否有一个解决方案,如何处理更新时嵌入到资源文件中的强命名程序集引用?
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]