针对3.5框架的VS2010上的RESX文件问题

时间:2010-08-03 16:41:32

标签: visual-studio-2010 msbuild resx windows-7-x64

这是一个我最近遇到的故事和一个可能的答案(?)我只想分享这些信息,因为我还没有在stackoverflow找到它。

我将我的解决方案从VS2008,WinXP,32位TO VS2010,Win7,64位升级。

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

使用VS2010的Debug构建没问题。但是对于Release模式,我必须使用延迟签名过程。现在,该过程会对使用VS2010生成的 RESX文件产生错误。 (再次注意旧的RESX文件不显示此行为)

(CoreResGen目标) Search.resx(176,5):错误RG0000:无法加载文件或程序集xxx.Controls,Version = 1.5 0,Culture = neutral,PublicKeyToken = 7acfcc7eabace048'或其依赖项之一。强名称验证失败。 (从HRESULT:0x8013141A开始)第176行,第5位。

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

http://blogs.msdn.com/b/visualstudio/archive/2010/06/19/resgen-exe-error-an-attempt-was-made-to-load-a-program-with-an-incorrect-format.aspx

我想知道是否有其他人遇到过这种情况以及他们采取了哪种解决方法? 没有解决方法,等待VS2010 SP1问世。

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

- 8/11/2010 一些额外的信息。

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

当我将消耗程序集更改为以4.0框架为目标时,问题就解决了。 当我定位3.5框架时,我们得到了错误。

1 个答案:

答案 0 :(得分:1)

我们遇到的问题也是* .resx文件中的ImageList(在代码中打开,而不是设计者):

<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        [bunch of binary data here]
    </value>
</data>

我们确认这只是删除与<data />相关的ImageList标记(见上文),然后删除控件设计者中的引用:

//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