resouce resx文件中的强命名程序集引用

Hay*_*ach 5 resources strongname windows-forms-designer visual-studio winforms

场景

GreatLib.dll的供应商部署了一个自定义控件。它正在客户Winforms应用程序中使用。GreatLib具有很强的命名能力,并公开了一些类型。当这些类型用作客户窗体中的公共属性时,它们也可以在Windows窗体设计器中使用。这是麻烦开始的地方:

设计人员将在表单的资源文件中为所有这些类型创建项目,并在这些项目中序列化其default(?)值。由于GreatLib是严格命名的,因此引用将包含程序集的完全限定名称。(我认为这就是Resgen所做的事情?)。这些项目可能如下所示:

<data name="vector3Control1.value" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
    AAEAAAD/////AQAAAAAAAAAMAgAAAFRJTE51bWVyaWNzLCBWZXJzaW9uPTQuMi41MzM4LjQ4MDIxLCBD
    dWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPThkOWJmNTBlZjg1NDczNGQFAQAAABpJTE51bWVy
    aWNzLkRyYXdpbmcuVmVjdG9yMwMAAAADbV94A21feQNtX3oAAAALCwsCAAAAAAAAAAAAAAAAAAAACw==
</value>
</data>
Run Code Online (Sandbox Code Playgroud)

设计器在Form.Designer.cs文件中生成一些与此类似的代码,以便读取资源项:

this.vector3Control1.value = ((ILNumerics.Drawing.Vector3)(resources.GetObject("vector3Control1.value")));
Run Code Online (Sandbox Code Playgroud)

问题

供应商提供了对GreatLib的更新,客户将旧版本替换为新版本。但是资源文件将保持不变!因此,我们可以在Designer.cs代码上获得InvalidCastExeption,或者-如果不再找到旧程序集-则是FileNotFoundException。

建议使用哪种方式处理resx文件中的强名称?

通过使用完全防止它们

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Run Code Online (Sandbox Code Playgroud)

?还是按照HansPassant的建议在每次更新时手动转换base64数据?