2012-02-14 2 views
1

웹 및 작업자 역할에서 다른 버전의 코어 프레임 워크 DLL을 참조하고 있습니다. 파일은 Copy Local으로 표시됩니다. Visual Studio는 올바른 버전을 프로젝트 참조로 표시합니다. 프로젝트를 컴파일 할 때 bin 디렉토리에도 올바른 버전이 포함되어 있습니다.Azure 패키지에 잘못된 DLL이 있습니다.

그러나 Azure 패키지를 만들도록 Visual Studio에 요청하면 패키지 및 패키지 중에 작성된 csx 폴더에 Worker 역할에 대한 잘못된 (원본) DLL 만 포함됩니다. 웹 역할에 올바른 DLL이 있습니다. 수동으로 cspack을 사용하는 경우에는 발생하지 않지만 실제로 패키지하는 것은 바람직하지 않습니다.

Visual Studio에서 올바른 참조 DLL을 사용하여 컴파일하려고하지만 잘못된 DLL을 함께 제공 할 수있는 원인은 무엇입니까?

추가 정보 : 내가 대신 비주얼 스튜디오의 포장을 할 msbuild를 실행하면, 나는 두 줄을 다음을 참조하십시오 : 그래서

Copying file from "C:\Users\bytenik\Dropbox\Treadmarks\lib\EntityFramework\System.Data.Entity.dll" to "C:\Users\bytenik\Dropbox\Treadmarks\src\Azure\obj\Debug\Worker\System.Data.Entity.dll". 
Copying file from "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Entity.dll" to "C:\Users\bytenik\Dropbox\Treadmarks\src\Azure\obj\Debug\Worker\System.Data.Entity.dll". 

을, 내 참조를 복사하는 것, 그리고 다음을 복사 시스템 참조.

참고 : .NET CLR DLL을 대체하는 전체 개념은 거대한 해킹입니다. 필요한 기능을 .NET 4.5가 지원할 때이 모든 것이 제거됩니다. 그동안 나는 개발을 계속할 수 있어야합니다.

"Azure References Incorrect DLL"은 실제로 사실과 다름이 아니라 유효하지만 내 문제를 해결하지 못한 질문으로 대체되었습니다.

+0

를 참조하십시오 원래 질문을 다시 작성하는 더 좋았을 것이다. 감사. – Kev

+0

@Kev 나는 그것에 대해 생각했지만 모든 대답은 의미가 없었을 것이다. –

답변

1

Visual Studio 프로젝트에 GAC에있는 어셈블리의 로컬 및/또는 수정 된 복사본에 대한 참조가있는 경우에도 컴파일 중에 사용되지만 런타임에 CLR은 항상 어셈블리를로드합니다 응용 프로그램과 동일한 디렉토리에 바로 앉아 있더라도 GAC에서 가져올 수 있습니다.

그래서 해결책은 수정 된 어셈블리를 팩하거나 배포하는 영리한 방법을 찾는 것이 아니라 CLR을 실제로로드하는 방법을 알아내는 것입니다.

두 가지 가능한 솔루션 :

1) 프로덕션 서버의 GAC에 어셈블리의 수정 된 버전을 배포 역할의 시작 작업 및 설치 프로젝트를 사용합니다.

2) 어셈블리의 서명을 제거하고 서명이없는 모든 버전이이 버전에 만들어 졌는지 확인하십시오. 원래 서명 된 버전을 참조 할 수있는 다른 어셈블리를 조심하고 GAC에서로드하려고 시도합니다.

자세한 내용과 링크가 미래 참고로 How to prevent a .NET application to use an assembly from the GAC?

관련 문제