2013-06-28 102 views
7

我有一個MVC4應用程序在VS 2010中有一把umbraco 6創建過,我已經創建了用於通過我的團隊市CI服務器到我的網站部署到一個CI環境中的網絡部署項目測試。App_Code文件夾

在CI服務器上第一次加載主頁(或任何頁面)時,它的加載非常好。然而,加載頁面的行爲會在我的CI服務器上創建一個App_Code文件夾,之後我會收到消息「不允許該目錄/ App_Code /因應用程序被預編譯」。刪除App_Code文件夾意味着它再次適用於一個頁面加載,並且該文件夾被重新創建。

刪除PrecompiledApp.config文件會導致我的網站不與YSOD陳述加載「未設置爲一個對象的實例對象引用。」在下面的堆棧跟蹤點「Umbraco.Web.UmbracoModule.BeginRequest(HttpContextBase httpContext)+25」

要清楚,需要一個。我只想讓它在頁面加載時自動停止創建一個!我曾經在VS中使用過Umbraco,並且之前多次部署過相同的方式,而不是Umbraco 6和MVC項目。

任何想法爲什麼App_Code被自動創建,我能做些什麼來阻止它?

非常感謝

理查德

回答

1

我看起來就像你用一把umbraco以類似的方式,包裹它作爲一個MVC 4項目。因此它變成了「VS Web應用程序」而不是「VS網站」。

重要的是要記住的是,一把umbraco最初沒有取得被作爲應用程序運行和大量的一把umbraco的功能首先是針對使用App_Code文件。

Umbraco.Core中的內部類AssemblyExtensions,PluginManager,TypeHelper和公共類TypeFinder具有依賴於App_Code文件夾存在的方法。即使你不需要Umbraco解決方案中的App_Code,如果你不想看到它,只是將它從你的解決方案中隱藏起來。如果你真的不希望它刪除源中的所有引用並創建你自己的Umbraco彙編。

==編輯下面==

閱讀您的評論,並再次發佈後,我創建了您的問題小解決方案。 Umbraco創建App_Code的事實仍然是由於框架初始化,如果沒有App_Code存在,它將不起作用。但重新編譯和創建Umbraco的一個自己的分支將作爲OP指出在升級等時創建一些額外的維護。

這不是來處理這件事情,讓一把umbraco創建App_Code文件夾也能消除同當應用程序初始化了理想,但最乾淨的方法。我會使用IApplicationEventHandler。示例代碼在我的盒子上工作。

using Umbraco.Core; 
using Umbraco.Core.IO; 

namespace YourNamespace.EventHandlers 
{ 
    public class AppCodeEvents : IApplicationEventHandler 
    { 
     public void OnApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { } 

     public void OnApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { } 

     public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { 
      if (System.IO.Directory.Exists(IOHelper.MapPath(IOHelper.ResolveUrl("~/App_Code")))) 
      { 
       System.IO.Directory.Delete(IOHelper.MapPath(IOHelper.ResolveUrl("~/App_Code"))); 
      } 
     } 
    } 
} 
+0

謝謝埃裏克。我之前在VS Web應用程序中使用過Umbraco,並且從未遇到過這個問題。這是在舊版本(例如4.0.x),這是一個問題,只會發生在較新的版本? 我曾嘗試從我的解決方案中排除空的App_Code文件夾,但當網站在與Team City一起構建後運行時仍會重新創建該文件夾,並引發最初描述的錯誤。 你說你運行類似於我的東西 - 你是否進入並開始去除Umbraco代碼中的引用?想要升級時,這可能會成爲一種負擔。 – richybailey

+0

同意,更新後的代碼示例解決您的問題 –

+0

我同意上面的代碼解決了問題,但它也引入了另一個問題:它導致應用程序重新初始化每個請求,這是一個巨大的性能問題。就目前而言,我會在Umbraco網站無法預編譯的假設下繼續前進。 –

0

如果您使用的是網絡部署項目預編譯您的網站,我假設你有你的所有引用從項目中分離出來 - 這是一件好事。所以,我認爲這裏的簡單答案是不要預編譯站點,只允許構建Web應用程序,以便它引入參考並部署構建的項目。

就我個人而言,我發現與Umbraco v6合作的最佳方式是通過NuGet。創建一個空的MVC4項目並使用NuGet添加Umbraco v6。這將自動爲您清理所有參考。這是因爲Umbraco的那些夢幻傢伙創建了兩個Nuget包,一個包含項目文件,另一個包含核心DLL。

這意味着,當網站建成後,引用被拉入並更新網站很容易。這只是通過NuGet更新的問題。

0

這也發生在我身上,原來是因爲'precompiledApp.config'文件以某種方式進入了生產服務器......不知道這是怎麼發生的,但是一旦我刪除並回收了這個停止的Web應用程序發生。

+0

我停止通過刪除precompiledApp.config文件來獲取App_Code舞蹈。現在,我對編譯錯誤有種種樂趣:_CS0433:類型'ASP.global_asax'存在於'c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root \ 17b6aa3f \ 55a36928 \ assembly \ dl3 \ 1f39276e \ 0041f4bb_8a98d001 \ App_global.asax.DLL'和'c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root \ 17b6aa3f \ 55a36928 \ App_global.asax。 dtv9abzr.dll'_ –

+0

@OwenBlacker你有沒有找到解決這個問題的辦法?我有同樣的情況:) – Squazz

+0

@Breeno你是如何在沒有precompiledApp.config的情況下工作的?我得到的錯誤類型與Owen相同 – Squazz