다음을 통해 공유


어셈블리 업데이트 작업

이 항목의 정보는 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를 유지합니다. 애플리케이션이 패치된 후에는 새 버전의 어셈블리에 대한 참조만 보유합니다. 이전 버전의 어셈블리는 전역 어셈블리 캐시의 새 버전과 함께 유지될 수 있습니다. 이는 이전 버전의 어셈블리를 사용하는 시스템의 다른 애플리케이션에는 영향을 주지 않습니다. 어셈블리의 새 버전과 이전 버전 모두에 동일한 구성 요소가 사용되는 경우 업데이트는 더 작은 델타 패치가 될 수 있습니다.
  • 새 버전의 어셈블리가 애플리케이션을 설치하려는 모든 시스템과 호환되지 않는 경우 새 버전과 이전 버전의 어셈블리를 병렬 어셈블리로 설치할 수 있습니다. 두 어셈블리 버전을 나란히 설치하려면 새 어셈블리 버전을 포함할 새 구성 요소를 만듭니다. 새 구성 요소에 대한 Component 테이블의 ComponentId는 이전 버전이 있는 구성 요소의 ComponentId와 달라야 합니다. 애플리케이션이 패치된 후 두 어셈블리 버전에 대한 참조를 보유합니다. 그런 다음 매니페스트를 통해 애플리케이션을 호환되는 버전의 어셈블리로 보낼 수 있습니다. 어셈블리의 새 버전과 이전 버전에 다른 구성 요소가 사용되는 경우 업데이트에서 전체 파일 교체를 사용합니다.

.NET Framework 어셈블리 업데이트

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

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

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

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

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

    메모

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