1. 程式人生 > >Umbraco項目發布錯誤 --More than one type want to be a model for content type authorize

Umbraco項目發布錯誤 --More than one type want to be a model for content type authorize

bin 後臺 dir 出現 event bsp div eve 項目發布

技術分享圖片

在開發項目時,解決方案下面包括三個項目

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