解決TFS Build Asp.Net Mvc開啟MvcBuildViews後無法載入組件問題
Posted on 2010-09-10 01:15 黃偉榮 阅读(1340) 评论(0) 编辑 收藏 举报為了在編譯時期就可以發現View中的語法錯誤,我們會將MvcBuildViews設成true,但因為公司有使用TFS的MSBuild,會因為環境的關係而產生問題,如無法載入組件。
開啟MvcBuildViews
開啟.csproj檔案,打開的方式常見有這二種
- 直接用文字編輯器開啟(如Notepad)
- 載入後在Solution Explorer中專案上右鍵選擇Unload Project,卸載後在按一次右鍵選擇Edit *.csproj
原始的檔案內容
1 2 3 4 5 6 7 8 9 | < Project ...> ... < MvcBuildViews >false</ MvcBuildViews > ... < Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> < AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" /> </ Target > ... </ Project > |
將MvcBuildViews改成<MvcBuildViews>true</MvcBuildViews>後,每次在Visual Stuiod中Build後,會在把.aspx或.ascx等檔案也Build一次,以便及早發現錯誤。
Asp.Net Mvc的專案在Build時,預設只會Build *.cs、*.Designer.cs如Controller、Model等檔案,其他Views下的 *.aspx、*.ascx是不會被Build的,可就是說在.aspx如打錯字,也必需等到真正報行網站時,才會報錯,這種明明可以在Build期問就可以發現的問題,比一一執行網頁才能發現錯誤,有效率多了。
但同樣的設定在本機正常,但用TFS Build就會發生無法載入組件問題,原因是因為TFS MSBuild的設定,輸入的檔案與專案在不同位址,所以用$(ProjectDir)當然找不到bin與其下的dll,這樣就會發生本機與TFS的路徑問題,所以要加上IsDesktopBuild來分隔。
1 2 3 4 | < Target Name="AfterBuild" Condition=" '$(MvcBuildViews)' == 'true' "> < AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)" /> < AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(OutDir)\_PublishedWebsites\$(ProjectName)" /> </ Target > |
用Condition="'$(IsDesktopBuild)' == 'false'"來分隔,本機與TFS的MSBuild。
TFS MSBuild的資料夾結構
--[設定的Drop Folder]
----[Build AgentID]
------[Build Definition Name]
---------Binaries{$(OutDir)}
--------------_PublishedWebsites
-----------------------[Web Project]
--------------[Other Project]
---------Sourcees
--------------[Project]{$(ProjectDir)}
如果有一個Build Deinition
Name=TestBuild
Drop Folder=C:\Builds
BuildAgentID=1
所以執行時從Source Control下載專案到 C:\Builds\1\TestBuild\Sourcees,而Build後會將檔案輸出到Binaries中,而Web Project會放在Binaries\_PublishedWebsites下,所以必需指到其路徑才能正常的執行AfterBuild。
參考資料
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?