可以在没有Microsoft.AspNetCore.All包的情况下创建ASP.NET Core 2.0项目吗?

时间:2017-08-30 08:55:38

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

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

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

3 个答案:

答案 0 :(得分:2)

正如DavidG指出的那样,Microsoft.AspNetCore.All包只是一个元包。是的,它引用了所有包含 ASP.NET Core 2.x Entity 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,但它仍然适用。

希望有所帮助。

答案 1 :(得分:1)

以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\

答案 2 :(得分:0)

要获得一个新的ASP.NET Core 2.0应用程序以.Net Framework为目标(例如,使用SpecFlow.NetCore for BDD),打开NuGet Manager删除Microsoft.AspNetCore.All,然后添加Microsoft.AspNetCore和{{1包。建筑应突出显示您需要添加的任何其他包。我的最终结果是:

Microsoft.AspNetCore.Mvc

您现在可以定位.Net Framework 4.6.1,例如

  <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>

未收到<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks> 错误。

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