2017-03-29 2 views
1

Powershell을 사용하여 VB6 응용 프로그램에서 참조 관리를 자동화 한 다음 나중에 프로젝트를 컴파일 할 수 있는지 여부를 조사했습니다.Powershell을 사용하여 참조 제거/추가 앤티크 VB6 응용 프로그램

3 개의 프로젝트가 있습니다. 요구 사항은 각 프로젝트에서 특정 참조를 제거하는 것입니다. 그런 다음, 아래에서 위로 프로젝트를 컴파일하고 (server> client> interface) 그 과정에서 참조를 다시 추가하십시오. (참조를 제거하고, server.dll을 컴파일하고, server.dll에 클라이언트 참조를 추가하고, client.dll을 컴파일하고, client.dll에 인터페이스 참조를 추가하고, interface.exe를 컴파일합니다.)

나는 생각하지만, 아직 주어졌습니다. 확실히 알아내는 일. 물론, 이것을 찾으려면 어디로 가나 요? 왜 여기 왜 물론, StackOverflow.

+0

내가 코드를 공유 할 수는 없지만, Powershell을 사용하여 VB6 사전 처리를 수행했습니다. VB 코드가 종속 된 DLL을 추가하는 것은 잘못된 것입니다. 만약 내가 올바르게 기억한다면, 대부분 텍스트 파일 일 뿐이므로 – 4c74356b41

+0

을 편집하고 컴파일하면됩니다. 좋은 지적입니다. 텍스트 파일입니다. – JustJohn

답변

2

참조는 단지 텍스트 파일 인 .VBP 파일에 저장됩니다. 주어진 참조는 파일의 정확히 한 줄을 차지합니다. 예를 들어

, 여기에 DAO 데이터베이스 구성 요소에 대한 참조 : 가장 중요한 정보는 GUID를 포함하는 경로 (의 왼쪽에 모든

Reference=*\G{00025E01-0000-0000-C000-000000000046}#5.0#0#C:\WINDOWS\SysWow64\dao360.dll#Microsoft DAO 3.6 Object Library

입니다 즉, 라이브러리의 고유 식별자 , 더 많거나 적음). 파일 스펙과 설명 텍스트는 VB6에서 참조 된 DLL에 대해 레지스트리에서 찾은 내용으로 업데이트하므로 중요하지 않습니다. 어떤 이유에서 결코 어쨌든 경로를 갖고있는 것 같다하지

Object={BDC217C8-ED16-11CD-956C-0000C04E4C0A}#1.1#0; tabctl32.ocx

:

참조하는 또 다른 형태는 같은 GUI 컨트롤을위한 것입니다. 대부분이 유형의 참조는 프로젝트에 의존하는 양식을 거의 손상시킬 수 있으므로 수정할 필요가 없습니다.

그래서 Powershell 스크립트에서 중요한 작업은 질문에 언급 된 개별 참조 행을 추가하거나 제거하는 것입니다. 바이너리 호환성의 형식을 사용하지 않는 한, GUID는 안정적으로 유지됩니다. 따라서 추가/제거해야 할 문자열을 본질적으로 하드 코드 할 수 있습니다.


이외에도이 접근 방식을 취해야하는 이유를 생각해 볼 가치가 있습니다. 일반적으로 VB6 솔루션을 구축하려면 참조를 추가/삭제하는 것이 필요하지 않습니다. 또한 배포 기술의 선택에 따라 참조를 안정적으로 유지하는 경향이있는 프로젝트 또는 이진 호환성을 사용하고있을 가능성이 큽니다.

마지막으로, 이미 VB6 프로젝트 그룹을 만드는 방법을 알고있는 Kinook's Visual Build Pro과 같은 기존 도구가 있으며 옵션과 같은 타사 도구를 사용하면 많은 작업을 줄일 수 있다고 언급 할 것입니다.

+0

플러스 1 특히 마지막 부분. 바이너리 또는 프로젝트 호환성으로이 문제는 사라집니다. [이 질문에] (http://stackoverflow.com/questions/179099/buildprocess-for-activex-com-vb6-enterprise-projects) 호환성에 대한 논의를 통해 VB6 프로젝트 그룹 빌드를 자동화하는 방법에 대한 설명이 있습니다. – MarkJ