从独立控制器项目引用的 Umbraco LiveDll

Umbraco LiveDll referencing from Separate Controller Project

我在 web.config 中为我的 Umbraco.ModelsBuilder.ModelsMode 启用了 LiveDll 以获得强类型模型。您可能知道也可能不知道,这会在 Umbraco 网站的 bin 文件夹中的磁盘上生成一个名为 Umbraco.Web.PublishedContentModels 的 dll。

我的问题是我不明白如何从我的(单独的)控制器项目中获取 "clean" 引用。 (我不太喜欢在网站 bin 文件夹中引用模型 dll "as is" 的前景。)

有人知道应该如何设置吗?

如果您引用 Umbraco.Web.PublishedContentModels.dll 从您的控制器项目中,您将导致循环引用,这样就不起作用了。

我们的工作方式是将 ModelsBuilder 设置为 Dll

<add key="Umbraco.ModelsBuilder.ModelsMode" value="Dll" />

然后我们设置了一个 Library 文件夹并将 dll 复制到该文件夹​​。然后另一个项目引用库中的 dll,因此我们不会得到循环引用。

所以我们的项目结构类似于

MySolution
   UmbracoWebProject
   ControllersProject
   Library

我们不想每次 运行 模型构建器时都将 dll 复制到库中,因此我们创建了一个预构建事件,以便在每次构建时为我们复制 dll。

要创建 Pre-Build 事件,请右键单击 Visual Studio 中的 Umbraco 项目并选择属性。 Select 假设您的项目结构如上所示,构建事件并将以下内容添加到预构建中。

IF EXIST "$(ProjectDir)bin\Umbraco.Web.PublishedContentModels.dll" xcopy "$(ProjectDir)bin\Umbraco.Web.PublishedContentModels.dll" "$(SolutionDir)Library"  /y

使用 Dll 模式,每当您更改 DocTypes

时,您都必须明确地运行 来自 Umbraco 的模型构建器

这对我们来说效果很好,但它确实是一个需要 Umbraco 和社区多加考虑的领域。如果有一个 'install and forget' 解决方案就好了。