2009-12-16 8 views
5

GAC에 어셈블리를 거의 배포하지 않아야합니다. GAC에 대한 (내) 이해에 대해 몇 가지 질문이있었습니다. 정말 나를 혼란스럽게합니다.GAC 및 어셈블리 버전 관리

어셈블리 및 파일 버전을 변경하는 버전을 알고 싶습니다. GAC dll을 응용 프로그램 설치로 대체 할 수있는 조합은 무엇입니까? GAC 파일에 대한 기본 관리를 제공합니다.

나는 GAC의 더 나은 이해를 위해 다음의 예를 사용하여 내 질문을 설명합니다 :

은 가정하자 난 제품 A와 B가있다.

A와 B는 모두 GAC에 설치된 myfile.dll을 참조합니다.
(I) 어셈블리 버전 [1.0.0.0]
(II) 어셈블리 파일 버전 [2.0.0.0] (더 혼동을 피하기 위해 의도적으로 상이한) 나 도포 버그 수정했다고 가정

  1. in myfile.dll. 그런 다음 어떤 버전을 변경해야합니까?

  2. 내가 A의 새로운 버전을 'ANEW'라고 가정하면. A, B ANEW가 나란히 놓일 수 있도록 버전을 변경해야한다고 가정합니다.

  3. 내가 GAC에있는 myfile.dll과 함께 설치되었는데 이제는 'B'에 버그 수정이있는 GAC DLL이있는 'B'를 설치하려고한다고 가정하면 변경 사항이 변경되어 ' 에이'.

  4. Q3과 동일하지만 B의 변경 사항은 'A'에 반영되어서는 안됩니다.

  5. 'A'가 myfile (1.0.0.0)과 함께 설치된다고 가정하십시오. 이제 'B'가 myfile (1.x.y.z)과 함께 설치된다고 가정하십시오. GAC 파일을 바꿀 예정입니까?

  6. 'A'가 myfile (1.0.0.0)과 함께 설치된다고 가정하십시오. 이제 'B'가 myfile (2.x.y.z)과 함께 설치된다고 가정하십시오. GAC 파일을 바꿀 예정입니까?

  7. 'A'가 myfile (1.0.0.0)과 함께 설치된다고 가정하십시오. 이제 'B'가 버전이 변경되지 않는다고 가정하고 myfile (1.0.0.0)으로 설치한다고 가정합니다. GAC 파일을 바꿀 예정입니까?

  8. 어떻게 GAC dll이 제거 되었습니까? 제거 기준이 있습니까?

질문은 조금 혼란 스럽지만 당신이 무엇을 묻는 지 알기를 바랍니다.

PS :이 주제 net-assembly-dll-sharing-and-deploying

답변

4

1) 관련 당신이 버그를 해결하기 위해 변경 사항의 종류에 따라 다릅니다. 공용 인터페이스를 변경하거나 동작을 크게 변경하면 어셈블리 버전 번호가 부딪 힐 수 있습니다. 그렇지 않은 경우 Microsoft에서 파일의 유일한 버전을 수행 할 수 있습니다.

2) 어셈블리 버전은 GAC가 신경 써야하는 모든 것입니다. 따라서 동일하게 이름이 지정된 두 개의 어셈블리를 나란히 배치하려면 어셈블리 버전별로 달라야합니다.

3) 어셈블리 버전 번호를 변경하고 게시자 정책을 포함하여 이전 버전의 클라이언트를 새 버전으로 리디렉션합니다.

4) 3과 같지만 게시자 정책을 포함하지 않거나 A를 무시하도록 구성합니다.

5) & 6) 아니오, 나란히 설치됩니다.

7) 그렇게 생각하지 않지만 파일 버전이 다른지 여부에 달려 있습니다. 확인할 수 있도록 노력하겠습니다.

8) 실수로 제거하는 것을 방지하기 위해 사용할 수있는 참조가 있습니다. MSI는이를 사용하므로 MSI를 사용하여 설치하면 어셈블리에 대한 참조를 추적하고 모든 응용 프로그램이 제거 될 때까지 MSI를 제거하지 않습니다. 수동으로 할 경우 (Gacutil/uf를 사용하여 말하십시오) 일을 망칠 수 있습니다.

+1

답을위한 thx. 나는이 링크를 찾았습니다 http://blogs.msdn.com/junfeng/archive/2004/02/14/72666.aspx "어셈블리가 이미 GAC에있는 것을 볼 때 파일 버전 GAC의 어셈블리 ("old"어셈블리라고 부름)와 설치할 어셈블리의 파일 버전 ("new"어셈블리)을 표시합니다. "new"어셈블리의 파일 버전이 "old"어셈블리보다 낮 으면, 우리는 퓨전에 강제 설치를 요구하지 않는 한 ("gacutil -if") "새로운"어셈블리 설치를 거부합니다. " – Amitd

+1

이 대답과 몇 가지 연구 후에 ... 나는 대답을 얻었습니다. thx u : [a] GAC에 나란히 설치하려면 항상 어셈블리 버전을 변경하십시오. [b]는 버그 수정을 위해 항상 어셈블리 파일 버전을 변경합니다. [c] 이전 어셈블리 버전의 경우 항상 이전 버전의 파일로 대체됩니다. [d]는 새 파일 버전을 강제로 이전 파일 버전 (동일한 어셈블리 버전에서)으로 대체하고 gacutil에서 force 플래그를 사용합니다. – Amitd