У меня проблема с запуском приложения из MS Visual Studio 2010. На самом деле это долгая история, и раньше я сталкивался с разными связанными проблемами. Но как минимум полгода проект проработал без изменений. И вот снова пытаюсь запустить, но безрезультатно. Сначала несколько ссылок о связанных проблемах, которые могут показаться одинаковыми (но похоже, что это не то же самое - только связанные):
Понизить версию приложения с .net 4.0 до 3.5
Проблемы с файлами RESX в VS2010, ориентированном на платформу 3.5
В моем проекте TargetFramework = 2.0, и он содержит несколько файлов ресурсов resx с изображениями и значками для приложения. Раньше у меня были проблемы с компиляцией файлов ресурсов, но я их исправил, как в сообщениях по ссылкам выше. И все работало нормально до вчерашнего дня (я давно не открывал этот проект, поэтому не могу сказать, что именно изменилось в среде).
А теперь сама проблема: сборка проекта завершается успешно, но при запуске приложения я получаю исключение FileNotFoundException в ресурсах кода конструктора форм. GetObject ("myImageName") ':
Could not load file or assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.
at System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
at System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Boolean throwOnError)
at System.Resources.ResourceReader.FindType(Int32 typeIndex)
at System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex)
at System.Resources.ResourceReader.LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
at System.Resources.ResourceReader.LoadObject(Int32 pos, ResourceTypeCode& typeCode)
at System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase, Boolean isString)
at System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase)
at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
at System.Resources.ResourceManager.GetObject(String name)
[MYAPP stack trace part. Hope you don't need it]
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Я задал вопрос о эту проблему на сайте Microsoft и нашел еще одного человека, у которого точно такая же проблема. Но его вопрос был проигнорирован, и на мой тоже пока нет ответа.
Среда: Windows 7 x64, .NET 4.0 SP1, VS 2010 Ultimate SP1. Конфигурация сборки проекта: Debug / AnyCPU (пробовал Debug / Release для AnyCPU / x86 - все равно. X64 и IA64 - для этого проекта невозможны)
Подробности расследования:
- Файлы resx не содержат ссылок на сборки 4.0. Особенно это относится к System.Windows.Forms 2.0 и System.Drawing 2.0.
- в проекте нет (и не может быть ссылок на какую-либо сборку 4.0, потому что он имеет TargetFramwork 2.0)
- Поиск во всей папке проекта записей "4.0" обнаружил странный факт: мой exe-файл имеет ссылку на mscorlib 4.0. На самом деле я не могу понять, как это могло случиться и как это исправить. Хотя AppDomain.CurrentDomain.GetAssemblies () возвращает mscorlib 2.0, а не 4.0 (и все другие сборки .NET версии 2.0).
- переключение resgen в 32-битный режим не помогает. Возвращать его тоже бесполезно.
- изменение файла proj с помощью блокнота для использования "правильной" версии resgen тоже не помогает
- целый день расследования и многие другие попытки оказались безуспешными. Я даже не нашел много людей, у которых была такая же проблема.
- То же самое и для TargetFramework = 3.5, но при установке TargetFramework = 4.0 все начинает работать нормально. К сожалению, в настоящее время перейти на .NET 4.0 невозможно.