Исполняемые файлы.NET не работают после перезаписи новыми версиями
Я столкнулся с очень странным поведением - после перезаписи.NET exectables новыми версиями с сетевого диска он не может запуститься. При попытке запуска из проводника Windows он показывает следующую ошибку:
[Window Title]
C:\Programs\zzz\clients.net\zzzNet.exe
[Content]
C:\Programs\zzz\clients.net\zzzNet.exe
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.
Я пытался выполнить следующие команды:
SxsTrace Trace -logfile:SxsTrace.etl
SxStrace Parse -logfile:SxSTrace.etl -outfile:SxSTrace.txt
И получил следующий результат:
=================
Begin Activation Context Generation.
Input Parameter:
Flags = 0
ProcessorArchitecture = AMD64
CultureFallBacks = en-US;en;ru-RU;ru
ManifestPath = C:\Programs\zzz\clients.net\zzzNet.exe
AssemblyDirectory = C:\Programs\zzz\clients.net\
Application Config File = C:\Programs\zzz\clients.net\zzzNet.exe.Config
-----------------
INFO: Parsing Application Config File C:\Programs\zzz\clients.net\zzzNet.exe.Config.
INFO: Parsing Manifest File C:\Programs\zzz\clients.net\zzzNet.exe.
INFO: Manifest Definition Identity is (null).
ERROR: Line 0: XML Syntax error.
ERROR: Activation Context generation failed.
End Activation Context Generation.
Это довольно простое приложение.NET (1 exe + 8 dll файлов). Он был создан для.NET 3.5 Client Profile.
Я не определил никакого особого "манифеста" там. Просто нажмите "Новый проект Windows Forms" в Visual Studio и разработайте его. Также app.config не содержит ничего особенного - только примитивные стандартные настройки - разделы appSettings и userSettings. На ПК, где я его разработал, все отлично работает. Проблемы начались только тогда, когда я скопировал эти двоичные файлы на эту конкретную ВМ и попытался запустить.
Также обратите внимание - эти исполняемые файлы не были установлены в GAC или что-то подобное, я просто скопировал их в папку на виртуальной машине и запустил. И когда это было в первый раз, все работало нормально.
Итак, шаблон проблемы следующий:
- Скопируйте исполняемые файлы.NET на новую виртуальную машину (это Win 7 x64), запустите ее, все работает нормально. Закрой его.
- Создание новой версии.NET исполняемых файлов на хост-компьютере, копирование новых.NET исполняемых файлов на ВМ (с перезаписью файлов).
- Попробуй начать - попала упомянутая проблема.
После некоторых действий в стиле шамана (таких как перезагрузка ОС и т. Д.) Он начинает работать, но почему это вообще произошло?!
Почему замена исполняемых файлов.NET новыми версиями вызывает ОЧЕНЬ ОГРОМНЫЕ ПРОБЛЕМЫ?!
Также БОЛЬШОЙ ВОПРОС - есть ли какая-нибудь специальная процедура для замены исполняемых файлов.NET, чтобы они работали? Поскольку это новая разработка приложений, я не хочу терять столько времени на каждую установку новых исполняемых файлов.:-\
Не могли бы вы помочь? Потому что это выглядит совершенно странно!
Спасибо заранее.
PS. Я проверил все проекты VS - все они имеют PlatformTarget=AnyCPU. Также во время выполнения я вижу ProcessType=MSIL (я показываю эту информацию в AboutBox для приложения). Таким образом, нет никакого сочетания двоичных файлов x86/x64.
1 ответ
Кажется, это было связано с поведением подключенного сетевого диска. Когда я копировал новые файлы из папки сетевого диска, он копировал неправильные файлы - странный случайный беспорядок новых и старых файлов (которые были там до того, как я обновил их на хосте ВМ).
Сценарий, чтобы заставить его работать:
- на ВМ: удалить все файлы в папке на сетевом диске
- на хосте VM: скопируйте новые файлы в папку, которая отображается как сетевой диск на виртуальной машине
- на ВМ: скопируйте файлы в целевую папку
- на ВМ: запустите приложение - теперь оно работает
Странная вещь Я помню, что видел нечто подобное с Windows Explorer в Windows 2008, когда копировал обновленные файлы win32.