Один и тот же исходный код на двух машинах приводит к разному поведению исполняемого файла - PullRequest
1 голос
/ 17 сентября 2008

Вот сценарий:

Проект приложения C # Windows, хранящийся в SVN, используется для создания исполняемого файла. Обычно сервер сборки обрабатывает процесс сборки и создает сборки через равные промежутки времени, которые используются при тестировании. В этом конкретном случае меня попросили изменить конкретную сборку и создать исполняемый файл.

Я не совсем уверен, изменяет ли сервер сборки файлы проекта, но я знаю, что он создает в SVN тег исходного кода, который он использовал для компиляции исполняемых файлов. Используя этот тег, я проверил код на второй машине, которая является машиной для разработки. Затем я скомпилировал исходный код на компьютере разработчика.

При выполнении приложение, скомпилированное на компьютере разработчика, не работает точно так же, как приложение, скомпилированное сервером сборки. Например, на машинах тестирования приложение DateTime Parse обнаруживает приложение. Тем не менее, исполняемый файл сборочной машины не вызывает каких-либо исключений. Если я запускаю исполняемый файл на компьютере разработчика, исключения не выдаются.

Итак, в итоге, обе машины теоретически используют один и тот же исходный код и проекты.
Исполняемый файл разработчика работает только на компьютере разработчика. Исполняемый файл Build machine работает на каждой машине, включая машину dev.

Сохранены ли региональные настройки устройства или часовой пояс в скомпилированном исполняемом файле? Любая идея, что может вызвать такое поведение или как проверить исполняемые файлы, чтобы найти возможные различия и исправить их?

К сожалению, я не могу взять тестовую машину и подключить к ней отладчик. Как только смогу, буду.

Ответы [ 9 ]

4 голосов
/ 17 сентября 2008

Приложение использует региональные настройки компьютера, на котором работает, и похоже, что это ваша проблема. Вы можете заставить поток использовать конкретную культуру, задав для System.Threading.Thread.CurrentThread.CurrentCulture и System.Threading.Thread.CurrentThread.CurrentUICulture определенное значение.

2 голосов
/ 17 сентября 2008

Возможно, что две машины имеют разные версии базовой библиотеки, которая не является частью вашего процесса сборки. Я видел, как это происходило при распределении сервисов по нашей внутренней ферме серверов.

1 голос
/ 18 сентября 2008

У меня есть пара вопросов - у обеих машин одинаковые региональные настройки и где находятся ваши журналы ошибок? Я надеюсь, что ;-) у вас есть исключения, которые обрабатываются и записываются на диск, в журналы событий ... что-то, что поможет с такими проблемами.

Откуда берется дата, которая анализируется? Если он есть в вашей базе данных, возможно, у вас тоже плохие данные.

1 голос
/ 18 сентября 2008

Я видел разные «региональные и языковые параметры» в XP, вызывающие такое поведение. Они совпадают на обеих машинах? Начало | Настройки | Панель управления | Региональные и языковые параметры ...

1 голос
/ 17 сентября 2008

Можете ли вы запустить программу на компьютере сборки под отладчиком?

Если так, то отладьте проблему - Не нужно угадывать .

Пусть отладчик на машине разработчика поймает исключение, установит точку останова в том же месте на машине сборки. Посмотрите, что отличается между ними.

0 голосов
/ 19 сентября 2008

Один и тот же исходный код редко, если каждый собирает одну и ту же программу на разных компьютерах. Вы должны всегда предполагать, что программы разные, никогда не ожидайте, что они будут одинаковыми. В такой среде, как linux с хорошим менеджером пакетов и периодическими и / или случайными обновлениями, никогда не ожидайте, что один и тот же исходный код создаст одну и ту же программу на одном компьютере. Чем выше язык, тем хуже становится. Сборка программы для отладчика кардинально отличается от сборки для выпуска. Версия отладчика даже без отладчика скрывает ошибки, которые вы не найдете, пока не перейдете к сборке релиза. Вы в основном получаете возможность отладки программы дважды, если слишком полагаетесь на среду отладчика.

0 голосов
/ 18 сентября 2008

Система сборки, вероятно, делает выпускную версию, в то время как сборка вручную на компьютере разработчика делает отладочную версию. Отладочная версия имеет больше проверки ошибок в нем. Посмотрите, сможете ли вы создать версию релиза вручную, и посмотрите, есть ли различия.

0 голосов
/ 18 сентября 2008

Почему вы все равно используете сервер сборки для кода C #, если я могу спросить?

Время сборки C #, когда я его использовал, было едва заметным (<2 с). Действительно ли приложение такое большое? </p>

0 голосов
/ 17 сентября 2008

Однажды у меня была похожая проблема (за исключением C ++). Когда я сравнил размеры скомпилированных исполняемых файлов, они были далеко. К сожалению, после нескольких дней поиска лучшее решение, которое я нашел, состояло в том, чтобы удалить VS05 и переустановить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...