加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 有没有办法将ASP.NET Core应用程序区域打包为Nu

发布时间:2020-12-16 09:42:36 所属栏目:asp.Net 来源:网络整理
导读:我正在开发一个ASP.NET Core应用程序,我希望将其作为NuGet包发布,您可以将其添加到任何Core Web项目中.该应用程序实际上完全局限于项目中的一个区域(即/ Areas / MyArea),包括控制器,视图,服务类,模型,视图等,除了少数部分.真的,这些是我喜欢神奇地添加到现
我正在开发一个ASP.NET Core应用程序,我希望将其作为NuGet包发布,您可以将其添加到任何Core Web项目中.该应用程序实际上完全局限于项目中的一个区域(即/ Areas / MyArea),包括控制器,视图,服务类,模型,视图等,除了少数部分.真的,这些是我喜欢神奇地添加到现有网络应用程序的部分:

>该地区及其中的一切
>它的www和JS在wwwroot / lib / myapp中
> Startup类中的条目
>根中的MyApp.json

我知道NuGet会恢复软件包依赖关系,但我不确定它是如何考虑客户端软件包的.

有什么建议? NuGet是错误的工具吗?

解决方法

目前afaik无法从nuget包中将文件传送到Web应用程序.我认为有一些讨论和工作正在进行中,以便将来实现这一目标.

我在我的项目中处理它的方式是嵌入视图和所需的静态js和css资源,这在project.json中是这样完成的:

“buildOptions”:{
????????“embed”:[“Views /”,“js /”,“css / **”]
????},

我创建了一个controller to serve my static resources:

public class cscsrController : Controller
{  
    private ContentResult GetContentResult(string resourceName,string contentType)
    {
        var assembly = typeof(cscsrController).GetTypeInfo().Assembly;
        var resourceStream = assembly.GetManifestResourceStream(resourceName);
        string payload;
        using (var reader = new StreamReader(resourceStream,Encoding.UTF8))
        {
            payload = reader.ReadToEnd();
        }

        return new ContentResult
        {
            ContentType = contentType,Content = payload,StatusCode = 200
        };
    }

    [HttpGet]
    [AllowAnonymous]
    public ContentResult bootstrapdatetimepickercss()
    {
        return GetContentResult(
            "cloudscribe.Core.Web.css.bootstrap-datetimepicker.min.css","text/css");
    }

    [HttpGet]
    [AllowAnonymous]
    public ContentResult momentwithlocalesjs()
    {
        return GetContentResult(
            "cloudscribe.Core.Web.js.moment-with-locales.min.js","text/javascript");
    }

}

然后我链接到我需要加载js和/或css的视图中的控制器操作.

为了使嵌入的视图工作,我创建了一个RazorViewEngineOptions的扩展方法:

public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeCore(this RazorViewEngineOptions options)
{
    options.FileProviders.Add(new EmbeddedFileProvider(
            typeof(SiteManager).GetTypeInfo().Assembly,"cloudscribe.Core.Web"
        ));

    return options;
}

这必须从Web应用程序Startup中的ConfigureServices调用,如下所示:

services.AddMvc()
    .AddRazorOptions(options =>
    {
        options.AddEmbeddedViewsForCloudscribeCore();

    })
    ;

这种技术对于区域应该是相同的.请注意,一个很酷的事情是用户可以下载视图并在本地安装它们,这将覆盖嵌入视图的使用,从而可以轻松自定义部分或全部视图.通过覆盖视图,还可以根据需要在本地手动安装js和css,如果需要自定义,则更改视图以链接到这些本地文件.最终的结果是我的nuget拥有它需要的一切,所以只有一些启动配置才能让事情发挥作用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读