3

Visual Studio 2010에서 여러 프로젝트가 포함 된 .NET 2.0 솔루션 (모든 것이 올바르게 빌드 된 곳)을 Visual Studio 2010으로 변환했습니다. Visual Studio 2010을 Admistrator 모드로 실행하고 "Build Solution"을 선택합니다. 일부에 실패한 빌드 프로젝트의 일부 단계를 포스트 빌드 : 나는이 같은 프로젝트를 선택하면Visual Studio 2008에서 변환 된 솔루션이 실패 함 Visual Studio 2010의 Gacutil 사후 구축 단계

Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

Failure adding assembly to the cache: Access denied. You might not have administrative credentials to perform this task. Contact your system administrator for assistance. 
36>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.Targets(3717,9): error MSB3073: The command ""C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i MyAssembly.dll" exited with code 1. 

을, 단지 개별 프로젝트보다는 전체 솔루션을 구축 한 다음 gacutil 명령은 성공적이다.

권한 오류 ("액세스가 거부되었습니다")가 발생하지만 Visual Studio 2010이 관리자 모드로 실행되고 있음을 확인한 것처럼 오류 메시지가 표시됩니다. 제목 표시 줄에 "MySolution - Microsoft Visual Studio (관리자) ").

전체 솔루션을 빌드 할 때 gacutil이 실패하지만 솔루션의 단일 프로젝트 만 빌드 할 때 성공하지 못하는 이유는 무엇입니까?

답변

2

는 최근 비주얼 스튜디오 2010

분석이 개 연속적으로 컴파일 된 프로젝트가에 gacutil를 호출 할 경우 단계를 빌드 후 있음을 보여 주었다, 두 번째 프로젝트에 당사의 솔루션 중 하나를 변환 한 후 동일한 문제가 발생 가 작 으면 빌드 머신이 충분히 빠르면 두 번째 호출 gacutil은 체계적으로 "액세스 거부"오류와 함께 실패합니다.

어떤 경쟁 조건처럼 보였지만 정확한 근본 원인을 파악할 수 없었습니다. gacutil의 인스턴스가 실행되는 동안 사용량이 많은 루프로 사후 구축 단계를 차단해도 상황은 바뀌지 않았습니다.

결국 버전 3.5 대신 gacutil의 버전 4.0을 사용하여 문제를 해결할 수있었습니다. , gacutil 빌드하는 동안 다시 실패하지 않았다 이러한 변경 사항을 적용한 후

"$(FrameworkSDKDir)Bin\NETFX 4.0 Tools\gacutil.exe" /if "$(TargetPath)" /nologo 

:

"$(FrameworkSDKDir)Bin\gacutil.exe" /if "$(TargetPath)" /nologo 

사람 : 우리는에서 우리의 빌드 후 단계에서 모든 통화를 변경했습니다.

+0

솔루션 프로젝트에서 프로젝트 참조 또는 dll 참조를 사용 했습니까? – denfromufa