针对3.5框架在VS2010中使用RESX文件的问题

6

这是一个关于我最近遇到的问题以及一个可能的答案(?)的故事。我想分享这些信息,因为我在stackoverflow上找不到。

我将我的解决方案从VS2008、WinXP、32位升级到了VS2010、Win7、64位。

当我对生成新的RESX文件或更新RESX文件的WinForms进行修改时,我遇到了问题。

使用VS2010的调试版本没有问题。但是,对于发布模式,我必须使用延迟签名过程。现在,这个过程会在使用VS2010生成的RESX文件上产生错误。(请再次注意:旧的RESX文件没有显示此行为)

(CoreResGen target) Search.resx(176,5): error RG0000: Could not load file or assembly xxx.Controls, Version=1.5 0, Culture=neutral, PublicKeyToken=7acfcc7eabace048' or one of its dependencies. Strong name validation failed. (Exce on from HRESULT: 0x8013141A) Line 176, position 5.

以下是我在网上找到的一些信息。

链接

我想知道其他人是否遇到过这个问题,以及他们采用了哪种解决方法? 如果没有解决方法,就只能等待VS2010 SP1的发布。

不幸的是,我正在使用可能已编译为32位的第三方程序集。 (我无法控制它们的构建过程)

-- 2010年8月11日 一些额外的信息。

该控件本身未签名或延迟签名。但该控件正在使用来自延迟签名程序集的组件。两个程序集都在同一个解决方案中。

当我将消费程序集更改为针对4.0框架时,问题得到解决。 当我将其定位到3.5框架时,我们会遇到错误。

1个回答

1
我们遇到的问题也与 *.resx 文件中的 ImageList(在代码中打开,而不是设计师)有关:
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        [bunch of binary data here]
    </value>
</data>

我们确认这是通过仅删除与ImageList相关的<data />标签,然后在控件的设计器中删除引用来完成的(如上所示):

//initialize
this.imageListSuperHeroes = new System.Windows.Forms.ImageList(this.components);

//control that references the ImageList
this.btnAwesome.ImageKey = "superman.gif";
this.btnAwesome.ImageList = this.imageListSuperHeroes;

将控件的图像引用(使用单独的图像!)从“项目资源文件”中添加,而不是“本地资源”,并更新您从表单中删除的引用。

this.btnAwesome.Image = global::PMPPlus.Properties.Resources.Superman;

这对我们有用,希望能帮助您朝正确的方向前进。如果不行,请在 *.resx 文件中查找哪个坏的 <data /> 引起了问题。

相关链接:http://connect.microsoft.com/VisualStudio/feedback/details/566131/error-in-resx-file-when-adding-imagelist

他们提出了一些解决方法,但并不适合我们的需求:

  • 针对另一个平台和框架
  • 使用 corflags 来干扰您的 C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin 目录!

我们的设置

  • 旧环境:Windows XP 32位
  • 新环境:Windows 7 64位
  • 通用设置:VS2010 + 目标框架:3.5 + 目标平台:x86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接