Umbraco項目發布錯誤 --More than one type want to be a model for content type authorize
在開發項目時,解決方案下面包括三個項目
MyUmbracoProject
MyUmbracoProject.Core
MyUmbracoProject.FrontEnd
第一個項目MyUmbracoProject上面安裝了UmbracoCms, 項目下面包括所有的Views,在它的web.config中有如下語句
所以,在Umbraco Back office中建立的DocumentType生成的.generated.cs都在 MyUmbracoProject\App_Data\Models 中
我們在MyUmbracoProject.Core項目的Build Event(項目右鍵 => Properties => Build Events => Pre-build event Command line)中,加入如下語句
xcopy /y "$(SolutionDir)MyUmbracoProject\App_Data\Models\*.generated.cs" "$(ProjectDir)Models\Generated"
這樣我們就把項目MyUmbracoProject中App_Data下面Models文件夾下面所有的Models復制到了項目MyUmbracoProject.Core項目的Models\Generated文件夾下面。 項目MyUmbracoProject.Core包括所有的Models和Controller後臺代碼
這樣編譯生成的MyUmbracoProject.Core.dll, 加入到項目MyUmbracoProject項目的bin文件夾中引用
發布項目時,發布MyUmbracoProject項目到服務器,發布文件中包括App_Data\Models文件夾(該文件夾中包含所有.generated.cs文件).
然後,在瀏覽器運行時,就報上面的那個錯誤
註意,項目中,在Umbraco back office中,有一個名稱叫做 authorize的Document Type
錯誤原因
在項目MyUmbracoProject.Core中,我把從MyUmbracoProject中復制過來的放在MyUmbracoProject.Core\Models\Generated文件夾下面所有的.generated.cs文件全部包括了在項目中,編譯生成了MyUmbracoProject.Core.dll
也就是說MyUmbracoProject.Core.dll中所有這些.generated.cs文件的定義。而上面我又說了,在發布的MyUmbracoProject項目中,發布文件中包括App_Data\Models文件夾(該文件夾中包含所有.generated.cs文件).
所有出現了重復,也就產生了上面的錯誤信息
解決方案
在項目MyUmbracoProject.Core中,把MyUmbracoProject.Core\Models\Generated中所有的.generated.cs文件都排除在項目之外(右鍵=>Exclude from Projects),再次編譯MyUmbracoProject.Core.dll, 加入到項目的MyUmbracoProject
的bin中進行引用。重新發布項目MyUmbracoProject
這個問題就解決了
Umbraco項目發布錯誤 --More than one type want to be a model for content type authorize