2010-06-04 7 views
2

나는 .NET 4.0 프로젝트 (C#)와 함께 하나의 솔루션으로 지연된 서명 된 DLL을 생성합니다. 즉, 난 음울점을 표시하고 서명합니다.dll을 참조 할 때 빌드 번호 무시

편집 : 이것은 어떻게 내가 버전 DLL :

[assembly: AssemblyVersion("0.7.0.*")] 
[assembly: AssemblyFileVersion("0.7.0.0")] 

나는 .NET 4.0 프로젝트에 다른 해결책을 가지고 (C++/CLI) 서명 된 DLL을 참조 실제로 (서명 된 DLL을 생성 , 게시가 지연되고 서명이 지연되어 a flaw in the C++ build system으로 인해 서명 됨).

문제는 DLL에 대한 참조도 빌드 번호를 (내가 빌드 번호를 갖고 싶어)을 포함하는 특정 버전 번호를 포함합니다.

내가 참조 된 DLL을 만들 때마다, 나는 프로젝트 설정 파일 (.vcxproj)을 변경해야하므로 새 버전의 DLL을 참조합니다. 소스 제어로 작업하기 때문에 이것은 매우 불편합니다. 각 컴퓨터는 자체적으로 참조 된 dll을 작성하기 때문에 서로 다른 빌드 번호가있을 수 있습니다. 참조 된 dll은 소스 제어에 없습니다.

경고 MSB3245 : I는 기준을 변경하지 않으면

, 내가 경고를 이 참조를 확인할 수 없습니다. ...이 같은

그리고 많은 오류를 어셈블리를 찾을 수 없습니다 :

오류 C3083 : '푸'는 '::'형식이어야의 왼쪽에있는 기호 내가 참조를 변경하면

는 해결됩니다.

어떻게 참조가 빌드 번호 또는 전체 버전 번호를 무시해야합니까?

답변

5

C# IDE에는 "Specific Version = False"옵션이 있습니다. C++/CLI IDE에서는 사용할 수 없습니다. 솔직히 말해서, 이것은 실제 문제가 아닙니다. 아마도 [AssemblyVersion] 특성을 잘못 사용하고있을 것입니다. 이 버전은 어셈블리의 공개 클래스와 연결됩니다. 이러한 클래스의 public 멤버를 변경하면 클래스에 대한 종속성이있는 코드를 만들 수있는 잠재적 인 변경이 발생할 수 있습니다.

당신이 [AssemblyVersion] 변경해야 지적 에서. 그리고 어셈블리를 사용하는 모든 프로젝트는 참조 어셈블리를 업데이트해야하며 다시 컴파일해야합니다. 버그 수정 또는 보이지 않는 클래스의 비틀기 같은

달리 비 주요 변경은, 그것을 사용하는 모든 프로젝트와 달리 완전히 호환되는 새로운 파일을 생성합니다. [AssemblyFileVersion] 번호를 업데이트해야합니다. C++/CLI 프로젝트에서 비 관리 버전 리소스를 업데이트해야합니다. 해당 .rc 파일을 변경하면 자동화가 가능하거나 #define을 사용할 수 있습니다.

버전 2.0의 .NET 기본 어셈블리가 동일한 방식으로 작동하는 방식에 유의하십시오. 그들의 [AssemblyVersion]은 3.0, 3.5 및 3.5 SP1 릴리스에서 2.0.0.0을 유지했습니다. 그들의 파일 버전은 2.0.50727.42에서 시작되었습니다. 지난 5 년 동안 여러 번 증가했거나주고 받았던 2.0.50727.4927까지 증가했습니다.기록을 위해

, 당신은 연결이 VS2010 버그는 버그가 아닙니다. 전에는 전혀 작동하지 않았고, 실패는 침묵이었습니다. Mt.exe에 매니페스트 후 조립라는 강한 내장, 시스템을 구축 ++은 C의 결함이다. 그리고이 과정에서 강력한 이름이 깨지면 파일 해시가 변경됩니다. 실제로 VS2010은 개선 된 기능입니다. 부러진 강력한 이름을 자동으로 알려주는 대신 경고합니다. 지연 게시판을 사용할 필요가 없으며 게시 빌드 이벤트에서 -Ra 만 사임합니다.

+0

+1. 감사. 제 질문을 편집하여 어셈블리 버전을 포함하는 방법을 포함 시켰으며 VS2010의 버그가 아니라 빌드의 결함을 언급했습니다. 모든 빌드를 새 버전으로 만들고 싶습니다.이 작업은 [AssemblyVersion]을 사용하고 [AssemblyFileVersion]을 사용하지 않고 수행 할 수 있습니다. [AssemblyVersion]에서 "*"를 사용하지 않아야합니까? – brickner

+0

예, [AssemblyVersion]에서 *를 사용하면 문제가 발생합니다. –

+0

@Hans Passant에게 감사드립니다. 그건 그렇고, 지연 서명하지 않아도되는 것은 사실입니다. 그러나 내가하지 않으면 경고를 받는다. 경고 810100b3 : ... 서명이 강한 어셈블리이며 매니페스트를 포함하면 서명이 무효화됩니다. 이 파일을 올바른 어셈블리로 만들려면이 파일에 다시 서명해야합니다. – brickner

관련 문제