TFS 빌드에서 뷰 빌드가 실패한 후 ASP.NET MVC 1.0
ASP.NET MVC Beta에서 1.0으로 업그레이드하고 MVC 프로젝트를 다음과 같이 변경했습니다(RC 릴리즈 노트에 설명됨).
<Project ...>
...
<MvcBuildViews>true</MvcBuildViews>
...
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
...
</Project>
빌드는 로컬 개발 상자에서 정상적으로 실행되지만 TFS 2008 빌드에서 "Could not load type 'xxxxx"로 실패합니다.MvcApplication', 아래 빌드 로그:
...
using "AspNetCompiler" task from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "AspNetCompiler"
Command:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v temp -p D:\Builds\xxx\Continuous\TeamBuild\Sources\UI\xxx.UI.Dashboard\\..\xxx.UI.Dashboard
The "AspNetCompiler" task is using "aspnet_compiler.exe" from "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe".
Utility to precompile an ASP.NET application
Copyright (C) Microsoft Corporation. All rights reserved.
/temp/global.asax(1): error ASPPARSE: Could not load type 'xxx.UI.Dashboard.MvcApplication'.
The command exited with code 1.
Done executing task "AspNetCompiler" -- FAILED.
...
MVC 1.0은 TFS에 설치되며 솔루션은 동일한 TFS 서버의 Visual Studio 인스턴스 내에 구축될 때 컴파일됩니다.
이 TFS 빌드 문제를 해결하려면 어떻게 해야 합니까?
사실, 이 문제에 대한 더 나은 해결책이 있습니다.VS/TFS 2010에서 테스트했지만 VS/TFS 2008에서도 작동해야 합니다.
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
저는 MVC 팀과 협력하여 프로젝트 템플릿을 업데이트하여 AfterBuild를 재정의하는 것이 아니라 맞춤형 대상과 함께 이 접근 방식을 사용하도록 할 것입니다.
저는 TFS Build 2010에서 ASP.NET MVC 프로젝트를 위한 컴파일 타임 뷰 확인 기능을 설정하는 방법에 대한 블로그 게시물을 게시했습니다.
이 문제는 ASP.NET MVC 프로젝트의 AfterBuild 대상 내에서 사용되는 AsNetCompiler MSBuild 태스크가 웹 프로젝트의 bin 폴더에 있는 dll을 참조하기를 기대하기 때문에 발생합니다.
데스크톱 빌드에서 bin 폴더는 원본 트리 아래에 있어야 합니다.
그러나 TFS Teambuild는 소스의 출력을 빌드 서버의 다른 디렉토리로 컴파일합니다.AspNetCompiler 태스크가 시작되면 필요한 DLL을 참조할 bin 디렉터리를 찾을 수 없으며 예외가 발생합니다.
해결책은 MVC 프로젝트의 애프터빌드 대상을 다음과 같이 수정하는 것입니다.
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
<AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(PublishDir)\_PublishedWebsites\$(ProjectName)" />
</Target>
이렇게 변경하면 바탕 화면과 TFS 빌드 서버 모두에서 보기를 컴파일할 수 있습니다.
Jim Lamb의 솔루션은 제가 웹 .csproj를 구축했을 때 효과가 없었습니다.
/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False
입니다.AfterBuild
응용 이 리케이복않았다니습으로 .WebProjectOutputDir
(그을 웹 합니다. 와 cshtml 입니다.)직 (BTW, 나 ziping 적합있에내한바이너리와는아만파일폴를기드다스즉하기이인빌플때문가레닙니에아원들만를더가는드빌OutDir)▁yetd▁(▁project직▁(▁thoseties▁proper▁to▁withb▁i▁build즉bing▁to▁web▁cos▁the)d▁binariessh▁and▁i인때에
이 문제를 피하고 그의 원래 목표의 의도를 존중하기 위해 저는 다음과 같이 했습니다.
<PropertyGroup>
<OnAfter_WPPCopyWebApplication>
MvcBuildViews;
</OnAfter_WPPCopyWebApplication>
</PropertyGroup>
<Target Name="MvcBuildViews" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
.csproj 파일에서 다음 설정을 변경했다는 뜻인 것 같습니다.
<MvcBuildViews>true</MvcBuildViews>
질문에 올린 설정을 터치하면 안 됩니다.로컬 컴퓨터에서 작동하는 경우 ASP.NET MVC 응용 프로그램을 미리 작성할 수 있습니다.
TFS 빌드 환경과 로컬 VS 머신 간에 무엇이 다른지 추적해야 합니다.아마 다른 버전의 MsBuild를 사용하는 것 같습니다.
자세한 출력을 사용하여 두 빌드를 모두 수행하고 두 빌드를 비교하여 무엇이 다른지 확인합니다.
아직 테스트 중이지만 태그 집합에서 false/true를 DEBUG 빌드 버전의 속성 그룹으로 이동하면 true로 설정할 수 있으며 MSBuild가 컴파일됩니다(MSBuild TfsBuild.proj 파일이 디버그 구성이 아닌 다른 것을 사용하도록 설정되어 있다고 가정).이 작업을 수행하려면 메모장을 사용하여 csproj 파일을 편집해야 합니다.
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<MvcBuildViews>true</MvcBuildViews>
....
MVCuildViews 태그를 위의 기본 속성 그룹에서 디버그 구성 속성 그룹(아래)으로 이동해야 합니다.TFS/MSBuild 설정이 완료되면 TFS의 TFSBuild.proj 파일에 추가한 단계를 게시해 보겠습니다.
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<MvcBuildViews>true</MvcBuildViews>
<DebugSymbols>true</DebugSymbols>
....
이 문제는 여기서 언급된 문제와 유사한 것 같습니다. http://blogs.msdn.com/aaronhallberg/archive/2007/07/02/team-build-and-web-deployment-projects.aspx 에서 aspnet_bin.exe를 호출하면 빌드 시스템의 MVC 프로젝트의 bin 폴더에 없기 때문에 바이너리를 찾지 못하는 것 같습니다.저는 아직 해결책을 찾지 못했습니다.
수락된 답변은 저에게 효과가 없었습니다.$(PublishDir) 매개 변수가 올바른 위치를 가리키지 않았습니다.대신 다음을 사용해야 했습니다.
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
<AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(OutDir)\_PublishedWebsites\$(ProjectName)" />
</Target>
원본 컨트롤에 솔루션에 표시되지 않는 오래된 폴더가 있습니다.
ASP.NET MVC 응용 프로그램은 미리 작성할 수 없습니다.
언급URL : https://stackoverflow.com/questions/755645/asp-net-mvc-1-0-afterbuilding-views-fails-on-tfs-build
'programing' 카테고리의 다른 글
Lando 인스턴스 내부에 심볼 링크 만들기 (0) | 2023.06.25 |
---|---|
깃허브에서 위키 페이지를 끌어오기 요청을 하려면 어떻게 해야 합니까? (0) | 2023.06.25 |
Firebase(Phone Auth) iOS 오류 가져오기: 사용자 지정 URL 체계 등록 (0) | 2023.06.25 |
PL/SQL ORA-06550의 "로컬 수집 유형이 허용되지 않음" 오류 (0) | 2023.06.20 |
가장 긴 연속 우승 기록 찾기 (0) | 2023.06.20 |