Как исправить ошибки VS2008 и VS2010 на Win7 x64
Хорошо, я сейчас в мире боли.
Мы разрабатывали с VS2008 (VB.NET, в основном WinForms, также ASP.NET и службы Windows) на Win7 x64, с особыми требованиями (от которых мы пока не можем избавиться), для таргетинга на x86 и framework 3.5.
Недавно мы обновились до VS2010 и довольно скоро столкнулись с проблемой несовместимости ResGen.exe. По сути, мы не можем скомпилировать приложение WinForms вообще с VS2010. Ни один из обходных путей, предложенных Microsoft или другими, не сработал ни для меня, ни для другого члена моей команды.
Поэтому мы попытались вернуться к VS2008, используя описанную здесь методику (то есть взломать файл решения), а также создав новое решение VS2008 и добавив в него проекты. Некоторое время это казалось нормальным, но теперь мы обнаруживаем, что при отладке приложения необработанные исключения не попадают в IDE, что делает разработку практически невозможной.
Совершенно новое тестовое приложение, созданное с использованием VS2008 (скомпилированное для x86 и.NET 3.5), не демонстрирует эту ошибку при обнаружении исключений.
На данный момент мне пришлось прибегнуть к разработке на VS2010 на Win7 (32-битной) виртуальной машине внутри основного компьютера, и она работает... но она медленная!
Любые идеи для выхода из этого были бы с благодарностью!
Обновление:
Итак, это не настоящее решение, но как обходной путь, это не полная катастрофа...
Спасибо Ною за его комментарий, который побудил меня изучить различные решения для виртуализации. Я теперь обнаружил (вероятно, последний человек здесь!) VirtualBox. Он не только немного более приятен в использовании, чем VMWare Player и различные воплощения Microsoft/Windows Virtual PC, но также имеет плавный режим, когда приложения, работающие на виртуальной машине, отображаются в виде отдельных окон на хосте. Итак, теперь у меня есть гостевая система x86 под управлением VS2010, компилируемая для x86 и Framework 3.5. Поскольку в гостевой системе нет конфликта x64/x86, проблема Resgen.exe отсутствует, и мой dev envt просто отображается как окно на рабочем столе моего хоста. Это все еще медленнее, чем было бы изначально, но я могу жить с этим сейчас.
Все равно оценит любые реальные решения (или, если это не удастся, исправление от Microsoft!!)
2 ответа
Ну, я сдался.
Некоторое время VirtualBox был в порядке, но медлительность виртуальной машины раздражала, и необходимость управлять движением между хостом и гостем всегда сводила меня с ума.
Итак, я восстановил всю машину с Windows 7 x86.
Полностью противен очевидному безразличию Microsoft к этой проблеме, но, думаю, я не первый, кто это чувствует.
Вы можете просто сделать Make ResGen.exe 32-битным путем: 1. Cd "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\Bin" 2. Corflags /32Bit+ /Force ResGen.exe
Сохраните ваш предыдущий resgen.exe перед этим изменением.
После этого изменения вам нужно будет изменить все ваши проекты, чтобы Resgen работал в 32-битном режиме.
Добавление Managed32Bit к PropertyGroup в файле проекта любого проекта, который генерирует ресурсы для.NET 3.5 - поскольку уловка corflags влияет на разрядность ResGen.exe на общесистемном уровне, свойство должно быть установлено также для всех затронутых проектов.
ИЛИ При запуске MSBuild.exe напрямую, передавая его с помощью переключателя глобального свойства: '/p:ResGenToolArchitecture=Managed32Bit'
Решение размещено на http://tune-up-pc.com/blog/?p=10790