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

Hed*_*dge 3 .net c# visual-studio

我想改变我的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文件中,如下所示:

<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <data name="traktor_connected" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>..\Resources\traktor_connected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
    </data>
    <data name="traktor_not_connected" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>..\Resources\traktor-not-connected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
    </data>
Run Code Online (Sandbox Code Playgroud)

sta*_*k72 5

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

保罗


Han*_*ant 5

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

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

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