项目里有一个WinForm程序,它需要使用一套第三方控件。而我的机器上存有这套控件的两种版本(一个是源码版,一个是演示版)。结果经常出现“程序集清单定义与程序集引用不匹配的问题”的异常。最要命的是有时候啥都没改,重新编译几次就没问题了,然后改了些东西之后再重新编译就又会报那个异常。
解决方法:首先,确保程序所引用的第三方控件的DLL都是同一个版本的,然后,把程序的bin\Debug和obj\Debug里的所有文件全部删除(如果提示文件正被占用无法删除则重启机器,总之一定要一个不留地全删除),然后重新编译。

2008-7-24 更新:
对DevExpress的报表设计器汉化,又被这个异常折磨好久。由于我有这套控件的源代码,所以采用了克隆它的*.resx资源文件改扩展名为*.zh-CN.resx,然后在*.zh-CN.resx文件中汉化的方法。当我汉化它的窗体的资源文件时,弹出警告对话框
“您尝试编辑的某个资源文件是另一个项目项(如窗体或控件)的一部分。编辑此项可能会损坏该项目项,您将不得不手动恢复它。另外,如果对该项目做进一步更改,您对此资源文件所做的更改可能会丢失。确实要编辑此文件吗?”,我还以为它只是吓唬吓唬我,就没当回事,结果发现一改了窗体的资源文件,就会在打开此窗体时引发“程序集清单定义与程序集引用不匹配”的异常。原因是我是使用VS2005的那个默认的可视化的资源文件编辑器来编辑的,在保存的时候,VS2005会把文件中的许多内容重写,很多内容都丢失了,例如会把

<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    
<value>True</value>
</metadata>

改成

 <data name="$this.Localizable" type="System.Boolean, mscorlib">
    
<value>True</value>
 
</data>

后来我采用右击资源文件,选“打开方式...”,然后使用“XML 编辑器”,直接在XML文件里改,就没问题了。

另外,只有把VS2005关了重新打开,再重编译,那个“程序集清单定义与程序集引用不匹配”才会消失。


posted on 2008-06-16 12:55  1-2-3  阅读(12437)  评论(2编辑  收藏  举报