문제

어셈블리 및 릴리스와 관련하여 모범 사례로 간주되는 것은 무엇입니까?

동일한 라이브러리의 여러 버전을 참조할 수 있기를 원합니다. 솔루션에는 우리가 직접 구축한 commonutils.dll 라이브러리의 다양한 버전에 의존하는 여러 프로젝트가 포함되어 있습니다.

모든 종속성이 bin/debug 또는 bin/release에 복사되므로 각 DLL 파일의 어셈블리 버전 번호가 서로 다름에도 불구하고 commonutils.dll의 단일 복사본만 존재할 수 있습니다.

여러 버전의 라이브러리를 참조하려면 어셈블리 이름에 버전 번호를 포함해야 합니까? 아니면 다른 방법이 있습니까?

도움이 되었습니까?

해결책

제가 살아온 방법은 다음과 같습니다.

DLL 파일을 어떤 용도로 사용할 것인지에 따라 다릅니다.나는 그것들을 두 가지 주요 그룹으로 분류합니다.

  1. 막다른 어셈블리.이것들은 실제로 어디에서나 참조할 계획이 없는 EXE 파일과 DLL 파일입니다.이름을 약하게 지정하고 릴리스하는 버전 번호가 소스 제어에 태그되어 있는지 확인하면 언제든지 롤백할 수 있습니다.

  2. 참조된 어셈블리.다른 어셈블리에서 여러 버전을 참조할 수 있도록 강력한 이름을 지정하세요.참조하려면 전체 이름을 사용하세요(Assembly.Load).다른 코드에서 참조할 수 있는 위치에 최신 버전의 복사본을 보관하세요.

다음으로, 참조를 로컬로 복사할지 여부를 선택할 수 있습니다.기본적으로 절충안은 다음과 같습니다. 참조에서 패치/업그레이드를 적용하시겠습니까?새로운 기능을 얻는다는 점에서 긍정적인 가치가 있을 수 있지만, 반면에 획기적인 변화가 있을 수도 있습니다.나는 여기서 결정은 사례별로 이루어져야 한다고 믿습니다.

Visual Studio에서 개발하는 동안 기본적으로 최신 버전을 사용하여 엮다 그러나 일단 컴파일되면 참조 어셈블리에는 컴파일에 사용한 특정 버전이 필요합니다.

마지막 결정은 로컬 복사 여부입니다.기본적으로 참조된 어셈블리를 배포하기 위한 메커니즘이 이미 있는 경우 이를 false로 설정합니다.

대규모 릴리스 관리 시스템을 계획하고 있다면 이에 대해 더 많은 생각과 관심을 기울여야 할 것입니다.나에게는(작은 상점 - 두 사람) 이것이 잘 작동합니다.우리는 무슨 일이 일어나고 있는지 알고 있으며 제한을 느끼지 않습니다. 말도 안 되는 방식으로 일을 하는 것.

런타임에 도달하면 원하는 것을 Assembly.Load 애플리케이션 도메인.그런 다음 Assembly.GetType을 사용하여 원하는 유형에 도달할 수 있습니다.로드된 여러 어셈블리(예: 동일한 프로젝트의 여러 버전)에 형식이 있는 경우 모호한 일치 예외 예외.이 문제를 해결하려면 정적 Assembly.GetType 메서드가 아닌 어셈블리 변수의 인스턴스에서 형식을 가져와야 합니다.

다른 팁

어셈블리는 버전이 다르기 때문에 이름이 동일하더라도 GAC(전역 어셈블리 캐시)에 공존할 수 있습니다.이것이 .NET Framework에서 제공하는 어셈블리가 작동하는 방식입니다.어셈블리가 GAC에 등록되려면 충족해야 하는 요구 사항에 서명해야 합니다.

어셈블리 이름에 버전 번호를 추가하는 것은 어셈블리 생태계의 전체 목적을 무너뜨리고 번거로운 IMHO입니다.특정 어셈블리의 버전을 확인하려면 속성 창을 열고 버전을 확인하세요.

다양한 어셈블리 버전에 서로 다른 이름을 지정하는 것이 가장 쉬운 방법이며 확실하게 작동합니다.

어셈블리(commonutils.dll)가 강력한 이름인 경우(예:서명됨), GAC(전역 어셈블리 캐시 - GAC에 동일한 어셈블리의 다른 버전을 나란히 설치할 수 있음)에 설치하는 것을 고려할 수 있습니다. 따라서 .NET이 있기 때문에 호출 애플리케이션은 자동으로 거기에서 적절한 버전을 가져옵니다. 유형에는 어셈블리 버전 정보가 포함됩니다.

VS 프로젝트에서 올바른 버전의 라이브러리를 참조하지만 이를 애플리케이션 폴더에 배포하지 않습니다.대신 (애플리케이션 설정 중에) GAC에 설치합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top