【问题标题】:Can an ASP.NET Core 2.0 project be created without a Microsoft.AspNetCore.All package?可以在没有 Microsoft.AspNetCore.All 包的情况下创建 ASP.NET Core 2.0 项目吗?
【发布时间】:2018-02-07 21:50:37
【问题描述】:

当 Visual Studio 使用 Empty 模板创建 ASP.NET Core 2.0 项目时,它会自动引用依赖于所有内容的 Microsoft.AspNetCore.All 包(我能想到的每个 ASP.NET 相关包)。在我看来,它破坏了 ASP.NET Core(模块化)的一个关键优势。

我可以让 Visual Studio 不在每个项目中都包含这个包吗?

【问题讨论】:

  • 只需删除对元包的引用...
  • 删除 Microsoft.AspNetCore.All 后,您可能需要添加 Microsoft.AspNetCore 和 Microsoft.AspNetCore.Mvc
  • @DavidG 它已经安装并占用了我的硬盘空间...以当前状态删除它是没有意义的,因为每次创建项目时都会重新下载并重新安装它。
  • 你说的是你的开发机器上的空间,这根本不相关,谁在乎那些在本地缓存的包?你应该只关心部署到其他机器上。

标签: c# visual-studio-2017 asp.net-core-2.0


【解决方案1】:

正如 DavidG 所指出的,Microsoft.AspNetCore.All 包只是一个元包。是的,它引用了涵盖 ASP.NET Core 2.xEntity Framework Core 2.x. 的所有包,是的,这意味着它非常庞大。但是,这些包不会随您的应用一起部署,除非您考虑应用的运行时部分。

引入 .All 元包的原因之一是为了减少项目文件中的混乱,它在这方面做得很好。现在你仍然会在你的 deps.json 文件中获得大量依赖项,除非你按照下面的描述进行修剪,但 dll 本身不包括在内。

这里有一些很好的资源:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage

https://github.com/dotnet/standard/blob/release/2.0.0/Microsoft.Packaging.Tools.Trimming/docs/trimming.md

https://andrewlock.net/the-microsoft-aspnetcore-all-metapackage-is-huge-and-thats-awesome-thanks-to-the-net-core-runtime-store-2/ - 有点旧,因为它引用了预览版 1,但它仍然适用。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    以 pcdev 的回答为基础,其中包含对您当前可以阅读的有关此主题的内容的良好参考。

    为简单起见,执行此操作以启用包修剪。

    在 cs.proj 文件中添加以下条目:

    • PropertyGroup:TrimUnusedDependencies,true
    • PackageReference:Microsoft.Packaging.Tools.Trimming

      <PropertyGroup>
        <TargetFramework>netcoreapp2.0</TargetFramework>
        <RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>
        <TrimUnusedDependencies>true</TrimUnusedDependencies>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.Packaging.Tools.Trimming" Version="1.1.0-preview1-25818-01" />
        <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
      </ItemGroup>
    </Project>
    

    使用此解决方案,您仍然可以引用 Microsoft.AspNetCore.All 包,但占用空间更小。

    在我的情况下,我正在进行自包含部署(不使用运行时包存储,.net 核心程序集的机器范围安装)

    我使用 cli 命令构建我的应用程序:

    "C:\Program Files\dotnet\dotnet.exe" publish --configuration Release -r win10-x64 --self-contained 
    
    Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
    Copyright (C) Microsoft Corporation. All rights reserved.
    
      Trimmed 191 out of 405 files for a savings of 31.62 MB
      Final app size is 59.5 MB
      [projectName] -> [path]\bin\Release\netcoreapp2.0\win10-x64\[projectName].dll
      Trimmed 191 out of 405 files for a savings of 31.62 MB
      Final app size is 59.5 MB
      [projectName]-> [path]\bin\Release\netcoreapp2.0\win10-x64\publish\
    

    【讨论】:

      【解决方案3】:

      要让新的 ASP.NET Core 2.0 应用程序以 .Net Framework 为目标(例如,将 SpecFlow.NetCore 用于 BDD)打开 NuGet 管理器以删除 Microsoft.AspNetCore.All,然后添加 Microsoft.AspNetCoreMicrosoft.AspNetCore.Mvc 包。构建应该突出显示您需要添加的任何其他包。我的最终结果是:

        <ItemGroup>
          <PackageReference Include="Microsoft.AspNetCore" Version="2.0.3" />
          <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.3" />
          <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.4" />
          <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.0.4" />
        </ItemGroup>
      

      您现在可以针对 .Net Framework 4.6.1,例如

      <TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
      

      没有收到Microsoft.AspNetCore.All 2.0.0 is not compatible with Net461 错误。

      当然,你失去了元包的所有优点。

      【讨论】:

        猜你喜欢
        • 2016-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-29
        相关资源
        最近更新 更多