【问题标题】:ASP.net 5 publish output too large?ASP.net 5 发布输出太大?
【发布时间】:2015-12-16 02:31:40
【问题描述】:

我有一个准系统 ASP.net 5 Web 项目,从 Empty 模板创建。

我在文件系统中发布它。我在 /bin/WebsiteName/Release/PublishOutput 中有文件夹 /approot、/logs 和 /wwwroot。

仅 /approot 文件夹就有 103MB。

这似乎有点多。如何降低?

如果是这样,我可能不知道哪些新概念?

【问题讨论】:

    标签: asp.net asp.net-core publish


    【解决方案1】:

    该文件夹包含应用程序、其依赖项和运行时。基本上,运行应用程序所需的一切。将它移到另一台机器上,它就可以运行,不需要其他任何东西。如果应用在 CoreCLR 上运行,则该文件夹的很大一部分很可能只是运行时。

    现在,有几种方法可以减小部署包的大小,但是您必须在目标服务器上获取依赖项和/或运行时。

    所以,一个完整的应用程序,所有内容都将使用dnu 发布,如下所示:

    dnu publish --runtime <runtime1> ... --runtime <runtimeN> --no-source`
    
    1. 仅为特定框架发布。如果您的应用同时针对 dnxcore50 (CoreCLR) 和 dnx451 (Desktop CLR),您可以选择使用 dnu publish 仅发布其中一个:

      dnu publish --framework dnxcore50 --runtime &lt;the framework for dnxcore50&gt;

    2. 不要发布运行时。将运行时排除在外,并以其他方式在目标计算机上获取它(这就是 Azure 网站所做的):

      dnu publish(没有--runtime

    3. 我不推荐这样做,但如果您真的需要,您可以在服务器上编译目标应用程序并仅发布源代码。然后你可以在服务器上恢复(dnu restore)。

    4. 检查您是否真的需要应用程序包含的所有包。例如,您是否包含System.Linq.Expressions 但不使用它?它将被发布,因为发布算法无法确定实际使用了什么。

    【讨论】:

    • 我只发布了 dnxcore50。如果多个网站可以访问引用它,我只需上传一次运行时(价值 88 兆的包)就可以了,那么,一旦它在目标服务器上启动,我如何从项目中引用它?
    • 确保dnxPATH 上并且设置了DNX_HOME 变量
    • 关于第 4 点 - 你如何控制它?当我在 project.json 中包含更高级别的依赖项时,会自动包含诸如 System.Linq.Expressions 之类的依赖项。我们是否只是手动删除 approot/packages/ 中的文件夹?
    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多