2009-09-03 3 views
0

CruiseControl.net을 사용하여 빌드하려는 웹 사이트 프로젝트가 있습니다. 한 페이지에웹 사이트 프로젝트는 CruiseControl.net을 통해 VS2008 SP1에서 빌드되지만 MSBUILD에서는 빌드되지 않습니다.

리피터 컨트롤 내에 중첩 된 사용자 정의 컨트롤이, 내가 ItemDataBound 이벤트 처리기에 해당 사용자 컨트롤에 대한 강력한 형식의 참조를 얻을 필요가 :

ASP.usercontrols_stars_ascx stars = (ASP.usercontrols_stars_ascx)e.Row.FindControl("stars"); 
    stars.StarCount = Convert.ToInt32(drv["rating"]); 

이 VS2008에서 잘 작동하지만, 다음과 같은 오류와 MSBUILD에서 휴식 :

w:\CCNet\InflatableBoats\Working\IBWeb\UserControls\DisplayReviews.ascx.cs (49,): 

errorCS0234 : 형식 또는 네임 스페이스 이름 'usercontrols_stars_ascx는'네임 스페이스 'ASP'(이? 당신이 어셈블리 참조가 누락)

에 존재하지 않습니다

MSBUILD가 웹 사이트 프로젝트가 사용자 컨트롤 및 페이지에 사용하는 ASP 네임 스페이스를 인식하지 못하기 때문에 네임 스페이스 문제 일 수 있다고 생각합니다.

답변

0

ascx 생성 클래스 대신 codebehind 클래스를 참조해야합니다. ascx 클래스는 코드 숨김 클래스를 상속받습니다. 따라서 코드 숨김에서 StarCount 속성을 정의하고 참조하십시오. 그러면 정상이어야합니다.

0
당신이 참조 추가 대화 상자의 .NET 탭에 나열된 입니다 찾아보기 탭에서 어셈블리 를 참조 분명히 경우

(이다 하지를 GAC와 같은) 그 같은에서 입니다 설치 위치이면 Visual Studio는 레지스트리를 사용하여 파일을 찾고 있다고 가정합니다. 특정 버전을 True로 설정한다고 생각합니다. 이는 IDE에서 알 수있는 유일한 방법입니다. 이렇게하면 동일한 패키지에 대한 설치 프로그램을 실행하지 않는 한 동일한 위치에 동일한 DLL이 있어도 다른 사람이 DLL을 컴파일하지 못하게합니다.

Unity 응용 프로그램 블록을 TFS 폴더에 곧바로 설치하고 TFS에 이진 파일을 추가하면 CruiseControl에서이 비트를 한 번 더 보냅니다. .csproj 파일에 참조 용 HintPath 항목이 없으므로 빌드 서버에서 DLL을 찾을 수 없습니다.

프로그램 추가/제거로 블록을 제거한 다음 TFS에서 다시 바이너리를 가져옵니다. 참조를 제거하고 다시 추가하면 문제가 해결되었습니다.

이것은 귀하의 상황과 관련이 없을 수 있습니다. (나는 jrummell의 제안을 먼저 시도해 보겠다.) 그러나 나는 그것을 언급 할 것이라고 생각했습니다.

Visual Studio는 개발자보다 더 잘 알고 있다고 가정하는 경향이 있습니다. 일반적으로 그렇지 않습니다.

관련 문제