gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:53:08 24 4
gpt4 key购买 nike

我正在开发一个 ASP.NET Core 应用程序,我很想将它发布为 NuGet 包,您可以将其添加到任何 Core Web 项目中。 app实际上完全局限在项目中的一个区域(即/Areas/MyArea),包括 Controller 、 View 、服务类、模型、 View 等,除了少数几个。真的,这些是我很想神奇地添加到现有网络应用程序的部分:

  • 该地区及其中的一切
  • wwwroot/lib/myapp 中的 CSS 和 JS
  • Startup 类中的条目
  • 根目录中的 MyApp.json

  • 我知道 NuGet 会恢复包依赖项,但我不确定它会如何考虑客户端包。

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

    最佳答案

    目前 afaik 无法将文件从 nuget 包传送到 Web 应用程序。我认为有一些讨论和工作正在进行中,以在 future 使之成为可能。

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

    “构建选项”:{
    "嵌入": [ " View /", "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 的 View 中链接到 Controller 操作。

    为了使嵌入的 View 工作,我创建了 RazorViewEngineOptions 的扩展方法:
    public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeCore(this RazorViewEngineOptions options)
    {
    options.FileProviders.Add(new EmbeddedFileProvider(
    typeof(SiteManager).GetTypeInfo().Assembly,
    "cloudscribe.Core.Web"
    ));

    return options;
    }

    这必须从 Web 应用程序中的 ConfigureServices 调用 Startup像这样:
    services.AddMvc()
    .AddRazorOptions(options =>
    {
    options.AddEmbeddedViewsForCloudscribeCore();

    })
    ;

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

    关于asp.net-core - 有没有办法将 ASP.NET Core 应用程序区域打包为 NuGet 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39419718/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com