【发布时间】:2018-01-29 16:45:42
【问题描述】:
项目结构
解决方案有以下项目:
Cms
SDK:Microsoft.NET.Sdk
输出类型:Library
包含:IServiceCollectionExtensions、IWebHostBuilderExtensions、TagHelpers、中间件和其他基础设施代码。
Cms.Web
SDK:Microsoft.NET.Sdk.Web
输出类型:Exe
包含:Razor 页面、控制器、视图、CMS 页面的 wwwroot
Cms.Manual
SDK:Microsoft.NET.Sdk.Web
输出类型:Exe
包含:Razor 页面、控制器、视图、CMS 手册的 wwwroot。
这是一个使用 CMS 的示例项目。
问题
在Cms.Manual.Startup:
public void ConfigureServices(IServiceCollection services)
{
services.AddCms();
}
在Cms.Services.IServiceCollectionExtensions:
public static IServiceCollection AddCms(this IServiceCollection services)
{
// other code
var assembly = typeof(Cms.Web.Pages.IndexModel).GetTypeInfo().Assembly;
services
.AddMvc()
.AddApplicationPart(assembly)
.AddControllersAsServices();
return services;
}
这会导致异常,因为找不到 DLL。我认为这是因为我对 .Exe 输出项目的构建过程的某些部分一无所知。
我已经验证了项目间引用:一切都井井有条。
其他尝试
将视图放在Cms 项目中,使用EmbeddedFileProvider 为它们提供服务。
这行得通,但由于现在嵌入了所有 .cshtml、.js 和 .css 文件,如果样式或内容错误,我将不得不重新编译。这使该项目的 UI 开发部分陷入停顿。
我能想到的其他解决方案
Cms.Web 中的 Web 开发,使用上述嵌入文件,但添加某种构建操作以自动将文件从 Cms.Web 移动到 Cms。
目标
我想实现两件事:
- 方便消费者:只需
.UseCms()即可,其他不多 - 从正在使用的 ASP.NET Core 项目中的另一个程序集提供 MVC
解决办法是什么?我会接受一种绕过异常的方法。
【问题讨论】:
标签: asp.net-core asp.net-core-2.0