Share via


어셈블리 업데이트

이 항목의 정보는 Windows Installer 패치를 사용하여 어셈블리를 업데이트하기 위해 권장되는 지침을 다룹니다.

어셈블리 업데이트 작성자는 모든 유형의 어셈블리에 적용되는 다음 지침을 사용할 수 있습니다.

  • 어셈블리를 업데이트하는 데 권장되는 방법은 MsiAssemblyName 테이블에서 어셈블리의 강력한 이름을 변경하는 것입니다. 새 어셈블리 버전은 새 구성 요소 또는 이전 버전을 제공하는 동일한 구성 요소에서 제공할 수 있습니다.
  • 동일한 구성 요소에서 새 어셈블리 버전을 제공하는 경우 어셈블리 유형을 .NET Framework 어셈블리에서 Win32 어셈블리로 또는 그 반대로 변경하지 마십시오.
  • 시스템의 모든 애플리케이션이 업데이트된 어셈블리를 사용해야 하는 경우 정책 어셈블리를 배포해야 합니다. 정책 어셈블리는 새 어셈블리 버전을 사용하도록 시스템의 애플리케이션을 리디렉션할 수 있습니다. 정책 어셈블리는 새 구성 요소를 만들어 제공해야 합니다.
  • 어셈블리 업데이트를 제거하려면 Windows Installer 3.0 이상이 필요합니다. 자세한 내용은 패치 제거를 참조하세요.
  • 최신 버전의 어셈블리에는 이전에 릴리스된 어셈블리의 파일 버전이 동일하거나 그 이상이어야 합니다.
  • Windows Installer 3.0은 완전한 파일 교체 또는 소규모 델타 업데이트로 .NET Framework 및 Win32 어셈블리를 서비스할 수 있습니다. 자세한 내용은 패치 크기 줄이기를 참조하세요.
  • 업데이트가 어셈블리의 강력한 이름을 변경하는 경우 패치 패키지에 MsiPatchSequence 테이블이 없으면 MsiPatchOldAssemblyFile 테이블 및 MsiPatchOldAssemblyName 테이블이 필요합니다. 패치 패키지의 MsiPatchSequence 테이블에 패치 시퀀싱 정보가 있는 경우 MsiPatchOldAssemblyFile 테이블 및 MsiPatchOldAssemblyName 테이블은 필요하지 않습니다.
  • 새 패치를 릴리스하기 전에 이전에 릴리스된 모든 패치와 함께 새 패치를 적용하여 패치를 테스트합니다.

Win32 어셈블리 업데이트

Win32 어셈블리를 업데이트할 때 다음 지침을 사용합니다.

  • MsiAssemblyName 테이블에 지정된 새 어셈블리의 강력한 이름을 변경합니다.
  • 애플리케이션이 시스템의 다른 애플리케이션에서 사용하는 어셈블리 버전에 영향을 주지 않고 항상 새 버전의 어셈블리를 사용하도록 하려면 동일한 구성 요소를 사용하여 이전 어셈블리 버전에 사용한 새 어셈블리 버전을 포함하도록 합니다. Component 테이블에서 동일한 ComponentId를 유지합니다. 애플리케이션이 패치된 후에는 새 버전의 어셈블리에 대한 참조만 보유합니다. 어셈블리의 이전 버전은 전역 어셈블리 캐시에 새 버전과 함께 유지될 수 있습니다. 이는 이전 버전의 어셈블리를 사용하는 시스템의 다른 애플리케이션에는 영향을 주지 않습니다. 어셈블리의 새 버전과 이전 버전 모두에 동일한 구성 요소를 사용하는 경우 업데이트는 소규모 델타 패치일 수 있습니다.
  • 새 버전의 어셈블리가 애플리케이션을 설치하려는 모든 시스템과 호환되지 않는 경우 어셈블리의 새 버전과 이전 버전을 Side-by-Side 어셈블리로 설치할 수 있습니다. 두 어셈블리 버전을 나란히 설치하려면 새 어셈블리 버전을 포함할 새 구성 요소를 만듭니다. 새 구성 요소에 대한 Component 테이블의 ComponentId는 이전 버전이 있는 구성 요소의 ComponentId와 달라야 합니다. 애플리케이션이 패치된 후 두 어셈블리 버전에 대한 참조를 보유합니다. 그런 다음, 매니페스트를 통해 애플리케이션을 호환되는 어셈블리 버전으로 다이렉션할 수 있습니다. 어셈블리의 새 버전과 이전 버전에 다른 구성 요소가 사용되는 경우 업데이트에서 전체 파일 교체를 사용합니다.

.NET Framework 어셈블리 업데이트

.NET Framework 어셈블리를 업데이트할 때 다음 지침을 사용합니다.

  • MsiAssemblyName 테이블에 지정된 새 어셈블리의 강력한 이름을 변경합니다.

  • 애플리케이션이 시스템의 다른 애플리케이션에서 사용하는 어셈블리 버전에 영향을 주지 않고 항상 새 버전의 어셈블리를 사용하도록 하려면 MsiAssemblyName 테이블에 지정된 새 어셈블리의 강력한 이름을 변경하고, 동일한 구성 요소를 사용하여 이전 어셈블리 버전에 사용한 새 어셈블리 버전을 포함하도록 합니다. Component 테이블에서 동일한 ComponentId를 유지합니다. 애플리케이션이 패치된 후에는 새 버전의 어셈블리에 대한 참조만 보유합니다. 어셈블리의 이전 버전은 전역 캐시에 새 버전과 함께 유지될 수 있습니다. 이는 이전 버전의 어셈블리를 사용하는 시스템의 다른 애플리케이션에는 영향을 주지 않습니다. 어셈블리의 새 버전과 이전 버전 모두에 동일한 구성 요소를 사용하는 경우 업데이트는 소규모 델타 패치일 수 있습니다.

  • 새 버전의 어셈블리가 애플리케이션을 설치하려는 모든 시스템과 호환되지 않는 경우 어셈블리의 새 버전과 이전 버전을 Side-by-Side 어셈블리로 설치할 수 있습니다. 두 어셈블리 버전을 나란히 설치하려면 MsiAssemblyName 테이블에 지정된 새 어셈블리의 강력한 이름을 변경하고 새 어셈블리 버전을 포함하도록 새 구성 요소를 만듭니다. 새 구성 요소에 대한 Component 테이블의 ComponentId는 이전 버전이 있는 구성 요소의 ComponentId와 달라야 합니다. 애플리케이션이 패치된 후 두 어셈블리 버전에 대한 참조를 보유합니다. 그런 다음, 매니페스트를 통해 애플리케이션을 호환되는 어셈블리 버전으로 다이렉션할 수 있습니다. 어셈블리의 새 버전과 이전 버전에 다른 구성 요소가 사용되는 경우 업데이트에서 전체 파일 교체를 사용합니다.

  • 내부 업데이트는 전역 어셈블리 캐시에서 .NET Framework 어셈블리의 복사본을 덮어씁니다. 이 형식의 어셈블리 업데이트는 어셈블리의 강력한 이름을 변경하지 않습니다. MsiAssemblyName 테이블의 FileVersion 필드에 있는 값만 변경됩니다. .NET Framework 어셈블리의 내부 업데이트에는 .NET Framework 1.1 SP1 이상이 필요합니다.

    참고

    내부 업데이트 형식은 전역 캐시에 있는 어셈블리의 복사본을 덮어쓰고 새 버전의 어셈블리가 이전 버전과 완전히 호환되지 않는 경우 다른 애플리케이션을 중단시킬 수 있습니다. 어셈블리를 업데이트하는 데 권장되는 방법은 MsiAssemblyName 테이블에서 어셈블리의 강력한 이름을 변경하는 것입니다.