2008-09-17 7 views
1

두 시스템의 동일한 소스 코드가 다른 실행 가능 동작을 산출합니다.

C# Windows 프로젝트는 SVN에 저장되어 실행 파일을 만드는 데 사용됩니다. 일반적으로 빌드 서버는 빌드 프로세스를 처리하고 테스트에 사용되는 규칙적인 간격으로 빌드를 만듭니다. 이 특정 인스턴스에서 특정 빌드를 수정하고 실행 파일을 생성하라는 요청을 받았습니다.

빌드 서버가 프로젝트 파일을 수정했는지는 확실치 않지만 실행 파일을 컴파일하는 데 사용한 소스 코드의 SVN에 태그를 생성합니다. 이 태그를 사용하여 개발 기계 인 두 번째 시스템에서 코드를 체크 아웃했습니다. 그런 다음 개발 컴퓨터에서 소스를 컴파일했습니다.

개발 컴퓨터에서 컴파일 된 응용 프로그램은 빌드 서버에서 컴파일 한 것과 똑같이 작동하지 않습니다. 예를 들어 테스트 컴퓨터에서 DateTime Parse 실행이 응용 프로그램에 의해 감지됩니다. 그러나 빌드 시스템의 실행 파일은 예외를 발생시키지 않습니다. 개발 컴퓨터에서 실행 파일을 실행해도 예외는 발생하지 않습니다.

요약하면 두 시스템 모두 이론적으로 동일한 소스 코드와 프로젝트를 사용합니다.
개발 컴퓨터의 실행 파일은 dev 컴퓨터에서만 작동합니다. 빌드 머신의 실행 파일은 dev 머신을 포함한 모든 머신에서 작동합니다.

컴퓨터의 국가 별 설정 또는 표준 시간대가 컴파일 된 실행 파일에 저장되어 있습니까? 이 동작을 유발할 수있는 아이디어 또는 실행 파일을 검사하여 가능한 차이점을 찾아 수정하는 방법은 무엇입니까?

불행히도 테스트 머신을 가져 와서 디버거를 연결할 수 없습니다. 최대한 빨리 할 수 ​​있습니다.

답변

4

응용 프로그램은 실행중인 컴퓨터의 국가 별 설정을 사용하므로 문제가있는 것처럼 보입니다. System.Threading.Thread.CurrentThread.CurrentCulture 및 System.Threading.Thread.CurrentThread.CurrentUICulture를 특정 값으로 설정하여 스레드가 특정 문화권을 사용하도록 할 수 있습니다.

1

디버거에서 빌드 컴퓨터에서 프로그램을 실행할 수 있습니까?

그렇다면 문제를 디버그하십시오. 을 추측 할 필요가 없습니다.

dev 컴퓨터에서 디버거가 예외를 잡았 으면 빌드 컴퓨터의 같은 위치에 중단 점을 설정하십시오. 이 둘의 차이점을 확인하십시오.

+0

현재 어떤 테스트 컴퓨터에서든 디버거를 실행할 수 없습니다. 나는 가능한 한 빨리 그렇게 할 것입니다. –

2

두 컴퓨터에 빌드 프로세스의 일부가 아닌 다른 버전의 기본 dll이있을 수 있습니다. 내부 서버 팜 전체에 서비스를 배포 할 때 이런 일이 발생하는 것을 보았습니다.

+0

외부 dll은 모두 동일한 바이너리임을 확인했습니다. 생각해 줘서 고마워. –

0

한 번 비슷한 문제가있었습니다 (C++ 제외). 컴파일 된 실행 파일의 크기를 비교할 때 그들은 벗어났습니다. 불행히도, 검색 일 후, 내가 찾은 최고의 솔루션은 VS05를 제거하고 다시 설치하는 것이 었습니다.

1

XP에서 이러한 "동작 방식"에 대해 다른 "지역 및 언어 옵션"을 보았습니다. 이 두 컴퓨터에서 일치합니까? 시작 | 설정 | 제어판 | 국가 및 언어 옵션 ...

0

왜 내가 묻는다면 C# 코드로 빌드 서버를 사용하고 있습니까?

C#의 빌드 타임은 거의 눈에 띄지 않았습니다 (< 2s). 앱이 정말로 큰가요?

+0

테스트를 위해 자동으로 릴리스되는 빌드를 만듭니다. 이 특별한 경우에 나는 특정 분기점에 대한 변경 사항을 테스트하기 위해 개발 기계 중 하나에서 별도의 빌드를 작성하도록 요청 받았다. –

1

두 가지 질문이 있습니다. 두 컴퓨터의 지역 설정이 동일하고 오류 로그는 어디에 있습니까? 나는 희망을 ;-) 당신은 처리되고 디스크, 이벤트 로그에 기록되는 예외가 있습니다. 이런 문제를 도와 줄 뭔가.

날짜는 어디에서 파싱됩니까? 그것이 아마 당신의 DB에 있다면 당신은 나쁜 데이터도 가지고 있습니다.

+0

날짜가 데이터베이스에서오고 있으며 예외가 처리되고있어 사용자에게 경고 메시지를 표시합니다. 그것은 이벤트 뷰어 또는 별도의 로그 파일에 아무것도 쓰는 경우 완전히 모르겠습니다. 방금 일주일 전에이 신청서를 작성하기 시작했습니다. –

0

빌드 시스템은 아마 릴리스 버전을 만드는 반면 dev PC의 수동 빌드는 디버그 버전을 만듭니다. 디버그 버전에는 더 많은 오류 검사가 있습니다. 수동으로 릴리스 버전을 빌드하고 여전히 차이점이 있는지 확인하십시오.

0

동일한 소스 코드가 각기 다른 컴퓨터에 동일한 프로그램을 빌드하는 경우는 거의 없습니다. 당신은 항상 프로그램이 다르다고 가정해야합니다. 훌륭한 패키지 관리자와 정기적 인 또는 임의의 업데이트가있는 Linux와 같은 환경에서는 동일한 소스 코드가 동일한 컴퓨터에서 동일한 프로그램을 빌드하지 못하도록해야합니다. 언어가 높을수록 더 나 빠지게됩니다. 디버거 용 프로그램을 빌드하는 것은 릴리스 용 빌드와 크게 다릅니다. 디버거가 없어도 디버거 버전은 릴리스 빌드에 갈 때까지 발견하지 못한 버그를 숨 깁니다. 디버거 환경에 너무 많이 의존하면 기본적으로 프로그램을 두 번 디버깅 할 수 있습니다.

관련 문제