Невозможно найти файл (или сборку) после изменения целевой платформы.NET проекта с 4.0 на 3.5
Я хочу изменить свой проект C#, который основан на.NET 4.0 до 3.5. Таким образом, я изменил целевую структуру проекта на 3.5.
После повторного открытия и попытки скомпилировать проект я получаю ошибку:
Не удалось найти файл или сборку "System.Drawing, версия =4.0.0.0, Culture= нейтральный, PublicKeyToken=b03f5f7f11d50a3a" или одну из его зависимостей. Система не может найти файл. Оде Эйн Абхенгигкейт Давон Вурде Нихт Гефунден. 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>
3 ответа
Эта ссылка указывает на.Net 4 - вам нужно удалить все ссылки.net 4, а затем прочитать их, используя версию сборки.net 3.5, и тогда это будет работать
Павел
Изменение настройки целевой структуры не совсем идеально. Например, в проекте C# вы должны вручную удалить ссылку на Microsoft.CSharp. И да, он не обновляет автоматически ссылки сборки System.Drawing в файлах.resx. Это довольно большой недостаток, работает нормально, когда вы увеличиваете номер версии.NET (что обычно делают все), kaboom, если вы пытаетесь уменьшить его. .NET совместима только вперед.
Вам придется удалить ресурсы и добавить их обратно после изменения целевой структуры. Довольно болезненно, однако редактирование файла.resx вручную для минимизации работы возможно. Щелкните правой кнопкой мыши файл.resx, откройте "С" и выберите текстовый редактор. Измените версию для имени сборки с 4.0.0.0 на 2.0.0.0.
Однако остерегайтесь, что могут быть более хитрые ресурсы, такие как ImageList, такие, чьи данные были встроены в.resx в двоичном виде. В файле.resx вы увидите блот байтов в кодировке base64. Это также имеет встроенный номер версии, сделанный BinaryFormatter. Возможная причина того, что VS не делает это для вас. Написание небольшой программы, которая декодирует эту строку base64 обратно в byte[], находит надлежащий 0x34, меняет его на 0x32 и преобразует обратно в base64 - это только восхищение хакера, человек по-машинному стилю:) Лучше просто добавить их в избегайте почти неизбежных препятствий.
У меня была эта ошибка, когда я установил COM-компонент в NET 4.5, а затем понизил до NET 4.0. Удаление и добавление ссылки не имеет значения.
Я нашел это полезным.
*Решение или обходной путь Измените целевой процессор платформы по умолчанию, чтобы приложения могли работать на 64-разрядных компьютерах.*
http://forums.arcgis.com/threads/19335-COM-Exception-was-unhandled-and-Class-not-registered
Целевая среда NET 4.0 для меня - 32-битная, поэтому в окне свойств я получаю целевой процессор до x86. Теперь это работает.