2014-01-08 1 views
1

VS2010에서 이진 호환성을 어떻게 사용할 수 있습니까?VS2010에서 버전을 변경 한 후 CLSID를 일정하게 유지하는 방법 - 이진 호환성 -

나는 새로운 버전의 DLL을 사용하여 새 어셈블리 파일을 빌드 할 때마다 프로젝트가 만료됩니다.

이미 내 WiX 패키지에서 해당 DLL을 com +로 등록하기 위해 하드 코딩 된 코드를 사용합니다. 그러나 모든 빌드를 변경하려면 이베이 새 버전으로 WiX 패키지를 업데이트해야합니다.

어떤 아이디어 ??

편집 한

나는이 CLSID 구성 요소 서비스에서 COM +에 등록하여 newley의 속성 창에 측면을 따라 귀하의 응용 프로그램 ID를 표시 한 것을 언급해야한다. 나는 그것이 여기

2는 좀 더 정보를 요구하고있는 무슨 관련이 또 다른 질문에 대한 링크입니다 편집

설치에 등록됩니다 있도록 윅스 파일로 하드 코드해야 WiX - Register ComPlus application and Assigning a role to a component

+1

당신은 당신의 vb.net 코드에서 클래스에'Guid' 속성을 지정 했습니까? – Medinoc

+0

예, 특정 GUID 집합이 있습니다. 그것 없이는 어떻게 될까? @Medinoc –

+0

설정되어있는 경우 어떻게 변경 될지 이해하지 못합니다. 일부 GUID가 설치 프로그램 패키지의 버전으로 변경된다는 것을 이해합니다. (WiX를 사용한 적이 없으며 VS2005 배포 프로젝트를 사용했고 제품 코드가 버전으로 변경되었습니다) 설정 한 경우 CoClass의 CLSID가 자동으로 변경되는 것을 볼 수 없습니다. 돌에. * ... 아니면 실제 CLSID 대신 질문에 다른 종류의 GUID를 의미하셨습니까? – Medinoc

답변

1

MSDN 덕분에 해결책을 찾았습니다.

기본적으로 어셈블리를 다시 빌드하면 새 버전 번호가 할당됩니다. 이는 Visual Studio .NET이 새 프로젝트에 대해 AssemblyVersion 특성을 "1.0. *"로 설정하기 때문입니다. 따라서 어셈블리를 다시 작성할 때마다 서비스되는 구성 요소에 대해 새 클래스 식별자 (CLSID)가 생성됩니다.

참고이 동작은 C# 및 Visual Basic .NET 프로젝트간에 약간 다릅니다. C# 프로젝트의 경우 어셈블리 버전은 다시 빌드 될 때마다 증가합니다. Visual Basic .NET 프로젝트의 경우 Visual Studio .NET으로로드 된 후 처음으로 프로젝트를 다시 빌드하면 어셈블리 버전이 증가합니다. Visual Studio .NET의 동일한 인스턴스 내에서 이후에 다시 빌드해도 어셈블리 버전이 증가하지 않습니다.

어셈블리 버전은 강력한 이름이없는 어셈블리에 대한 정보이기 때문에 문제가되지 않습니다. 강력한 명명 된 어셈블리의 경우 수동으로 유지 관리되는 정적 버전 번호를 사용해야합니다. 이 버전 및 기타 버전 관리 문제는 5 장 "빌드 프로세스"에서 어셈블리 버전 제어에 자세히 설명되어 있습니다. 명시 적으로

1. : 구성 요소는 COM + 카탈로그에 끝낼 서비스되는 CLSID를 제어하고 개발자가 서비스되는 구성 요소를 재 구축 할 때마다 나타나는 여러 버전을 피하기, 다음 방법 중 하나를 사용하기 위해

. "1.0 *"다음 가이 속성을 사용하여 CLSID를 제어

[Guid("2136360E-FEBC-475a-95B4-3DDDD586E52A")] 
public interface IFoo 
{} 

[TransactionAttribute(TransactionOption.Required), 
Guid("57F01F20-9C0C-4e63-9588-720D5D537E66")] 
public class Foo: ServicedComponent, IFoo 
{} 

2가 서비스되는 구성 요소의 조립을위한 정적 어셈블리 버전 번호를 유지 및 Visual Studio .NET 기본값을 사용하지 마십시오을 버전 번호 매기기 체계. 어셈블리 버전 관리에 대한 자세한 내용은 5 장, "빌드 프로세스"의 어셈블리 버전 제어를 참조하십시오.

첫 번째 방법을 사용했습니다. 치료를 했어.

http://msdn.microsoft.com/en-us/library/ee817675.aspx

+0

그게 내가이 모든 시간을 당신에게 말했던 것입니다. 그리고 계속 작동하지 않는다고 계속 말했습니다 ... – Medinoc

+0

예, 언급 한 적이 없습니다. '[TransactionAttribute (TransactionOption.Required)'으로 설정되었습니다. 'RequiresNew' 플러스 나는 다시 댓글을 달았고 그것을 당신에게 공짜로주었습니다 :) –

+0

아, 나는 당신의 해결책을 오해했습니다. 나는'TransactionAttribute'가 GUID에 영향을 미치는지 전혀 몰랐습니다. – Medinoc

관련 문제