该解决方案包含以下项目:
Cms
Sdk:Microsoft.NET.Sdk
输出类型:Library
包含:IServiceCollectionExtensions
,IWebHostBuilderExtensions
,TagHelpers,中间件和其他基础架构代码。
Cms.Web
Sdk:Microsoft.NET.Sdk.Web
输出类型:Exe
包含:用于CMS'页面的Razor页面,控制器,视图,wwwroot
Cms.Manual
Sdk:Microsoft.NET.Sdk.Web
输出类型:Exe
包含:用于CMS手册的Razor页面,控制器,视图,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
中的网页开发,使用上述嵌入文件,但添加某种构建操作以自动将文件从Cms.Web
移动到Cms
。
我想实现两件事:
.UseCms()
而不是其他解决方案是什么?我会接受一种绕过例外的方法。
答案 0 :(得分:0)
您可以尝试使用我的书架
AUR.NETCore.Mvc.PluginsManager
选择一个包含程序集的文件夹
使用或扩展AUR.NETCore.Mvc.PluginsManager.interfaces.IPluginBase
,它是插件的接口
然后必须将其添加到ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Plugins.Load(services); // last row
}
请记住必须设置外部插件程序
public ViewsTypeResouces ViewsTypeResouces { get => ViewsTypeResouces.Assembly; }
您将在文档中找到所有内容