2009-04-13 7 views
3

특정 서버를 개발합니다. 지금까지 두 버전을 동시에 설치할 수 없었습니다. 이제 버전을 변경하려고합니다. 문제는 서버 구성 요소에 버전 번호를 추가했는지 여부입니다. 서버에는 3 개의 exes 및 5 개의 dll (일부 COM, 일부 기본 VC++)이 있습니다. 이름의 일부 또는 모두에 버전 (Serv71.exe, module71.dll)이 있어야합니까?실행 파일에 이름에 버전 번호가 있어야합니까?

전문가 측에서는 서버 관리를 좀 더 쉽게 할 수 있습니다. 특정 인스턴스가 오작동하는 경우 작업 관리자에서 식별 할 수 있습니다. 또한, 나쁜 설치가 눈치 채지 않고 혼합 된 구성 요소 버전으로 끝날 가능성은 없습니다.

단점이라면 개발이 조금 더 어려워 질 것입니다. 서버는 독립형 제품이 아니라 오라클 애플리케이션 인프라의 일부입니다. 즉, 기본 앱의 버전을 가져옵니다. 즉, 특정 구성 요소는 버전간에 전혀 변경되지 않은 경우에도 다른 이름을 가져야합니다.

이 모든 것이 중요한 문제는 아닙니다. 우리는 아마 두 가지 방법을 함께 사용할 수 있습니다. 그렇게 말하면, 전략 중 하나에 찬성하여 승자의 주장을 놓쳤을 수도 있습니다. 일반적인 선택은 무엇입니까? 너 뭐하니?

편집 : 저는 COM 및 파일 메타 데이터 버전 관리에 익숙하며 파일 이름 버전 관리가 중복되는 것에 동의합니다. 나는 더 중요한 것이 무엇인지 알아 내려고 노력 중입니다. 상수 중복 오버 헤드 또는 유지 관리에서 드문 이득입니다.

답변

1

COM API의 경우 라이브러리에 필요한 모든 버전 정보가 실제로 있습니다. 그 버전 DLL 번호를 중복해서 지정하는 것이 좋을 것입니다. 적어도 버전 번호가 동기화되지 않으면 혼란 스럽습니다. 나는 명백한 업 그레 이드 경로를 원할 때마다 인터페이스 식별자와 coclass 이름에 버전 식별자를 추가하고 모든 변경 사항을 수정합니다.

일반적인 바이너리 DLL API의 경우, 버전 번호를 추가하는 것은 좋은 아이디어이지만, 잘 실행되지는 못했습니다. (그리고 오래된 16 비트 VB 런타임 DLL에서 상당히 끔찍하게 실행되었습니다!). 그들은 명확하고 구분 된 API를 갖고 있습니까? 아니면 수십 가지 기능을 노출합니까? 인터페이스가 크다면 변화가 일어나지 않도록 미성년자를 괴롭히는 데 문제가있을 것입니다. 이런 방식으로 버전에 레이블을 지정하면 일관성을 유지해야합니다. 모든 버전 변경은 클라이언트를 정적으로 링크하는 작업을 다시 컴파일해야한다는 것을 의미합니다. 따라서 버전 자체가 재 지정되었습니다. 여기서 잠재적 인 문제는 '버전 노이즈'이 많이 발생하여 중요한 변경 사항이 숨겨져 있다는 것입니다.

Windows 바이너리에는 버전 메타 데이터 (VERSIONINFO 구조)가 포함되어 있습니다. LeJeune이 말했듯이, 이것은 잘 알려진 경로입니다. 그러나 잘못된 정보를 함께 링크 할 때 자동으로 오류가 발생하지는 않습니다. 그러나 필요한 구성 관리 스키마를 지원하기 위해 상대적으로 쉽게 활용할 수 있습니다.

0

DLL이 다른 버전의 다른 API를 제공하는 경우 버전 번호를 파일 이름에 추가해야한다고 말하고 싶습니다. 실행 파일의 경우 중요하지 않습니다. 실행 파일이 지정된 인터페이스를 사용하여 상호 작용하고 변경되는 경우 실행 파일의 파일 이름에도 버전 번호를 사용합니다.

0

"단점이라면 개발이 조금 더 어려워 질 것입니다."

완전히 사실은 아닙니다. 이미 가지고있는 문제를 드러내어 모든 구성 요소의 모든 릴리스를 정렬합니다.

전체적으로 응용 프로그램 하부 구조에 모든 구성 요소의 모든 적절한 릴리스가 있는지 확인해야합니다.

은 각 부분에 적절하게 레이블을 지정하고 함께 사용해야하는 버전과 현재 버전을 나타내는 구성 보고서를 제공하여 편리하게 만듭니다.

2

일반적으로 버전 정보는 DLL의 메타 데이터 (파일 확장 정보)의 일부이며 파일 이름의 일부가 아닙니다.

유지 관리가 더 쉽습니다. 설치 프로그램은 기존 바이너리 파일을 업그레이드/교체 할 때 해당 정보로 작업하는 방법을 알고 있습니다. 새 버전의 DLL을 실행해야하는 경우 EXE를 다시 컴파일하거나 다시 링크 할 필요가 없습니다.

일반적인 지침으로 - 새로운 메커니즘을 고안하지 마십시오. 기존 것을 사용하십시오.

관련 문제