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

时间:2014-08-13 21:54:57

标签: winforms visual-studio resources windows-forms-designer strongname

情景

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>

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

this.vector3Control1.value = ((ILNumerics.Drawing.Vector3)(resources.GetObject("vector3Control1.value")));

问题

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

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

使用

完全防止它们
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

?或者手动将每次更新的base64数据转换为suggested by HansPassant

0 个答案:

没有答案