将项目的.NET目标框架从4.0更改为3.5后,找不到文件(或程序集)

我想改变我的C#项目,它基于.NET 4.0到3.5。 所以我将项目的目标框架改为3.5。

重新打开并尝试编译项目后,我收到错误:

无法找到文件或程序集“System.Drawing,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其中一个依赖项。 系统找不到该文件。 odereineAbhängigkeitdavonwurde nicht gefunden。 Das System kann die angegebene Datei nicht finden。

这发生在Resource.resx文件中,如下所示:

  ..\Resources\traktor_connected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a   ..\Resources\traktor-not-connected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a  

该引用指向.Net 4 – 您需要删除所有.net 4引用,然后使用.net 3.5版本的组件读取它们然后它将工作

保罗

更改目标框架设置并不完美。 例如,在C#项目中,您必须手动删除对Microsoft.CSharp的引用。 是的,它不会自动更新.resx文件中的System.Drawing程序集引用。 这是一个相当大的缺陷,当你增加 .NET版本号(几乎每个人通常都会这样做)时可以正常工作,kaboom如果你试图减少它。 .NET只是向前兼容。

在更改目标框架后,您必须删除资源并将其添加回来。 非常痛苦,可以手动编辑.resx文件以最小化工作。 右键单击.resx文件,打开方式,然后选择文本编辑器。 将程序集名称的版本从4.0.0.0更改为2.0.0.0。

但请注意,可能存在比较复杂的资源,例如ImageList,其数据以二进制forms嵌入.resx中。 您将在.resx文件中看到一小块base64编码的字节。 它也嵌入了版本号,由BinaryFormatter完成。 VS不会为你做这件事的可能原因。 编写一个将base64字符串解码回byte []的小程序,找到正确的0x34并将其更改为0x32并将其转换回base64只是黑客的喜悦,超过机器风格:)最好只重新添加到避免几乎不可避免的oopses。

我在NET 4.5中安装COM组件然后降级到NET 4.0时出现此错误。 删除和添加引用没有区别。

我觉得这很有帮助。

* 解决方案或解决方法更改默认的平台目标CPU以允许应用程序在64位计算机上运行。 *

http://forums.arcgis.com/threads/19335-COM-Exception-was-unhandled-and-Class-not-registered

我的.NET 4.0目标环境是32位,所以我在属性窗口中将目标CPU降低到x86。 现在它运行了。