一个ASP.NET Core 2.0项目是在没有Microsoft的情况下创建的.AspNetCore.所有包裹



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

我可以使Visual Studio不将此包包含在每个项目中吗?

微软。AspNetCore。正如DavidG所指出的,所有的软件包都只是一个元软件包。是的,它引用了涵盖ASP的所有包。NET Core 2.x和实体框架Core 2.x,是的,这意味着它是巨大的。但是,除非您考虑到应用程序的运行时部分,否则这些包不会与您的应用程序一起部署。

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

这里有几个好的资源:

https://learn.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/-有点旧,因为它引用了Preview 1,但它仍然适用。

希望能有所帮助。

基于pcdev的答案,其中包含了您当前可以阅读的关于该主题的内容的良好参考。

为了简单起见,这样做可以启用Package Trimming。

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

  • PropertyGroup:TrimUnusedDependencies,true
  • PackageReference:Microsoft。包装材料工具。修剪

<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。所有封装,但占地面积较小。

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

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

"C:Program Filesdotnetdotnet.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]binReleasenetcoreapp2.0win10-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]binReleasenetcoreapp2.0win10-x64publish

获取新的ASP。NET Core 2.0应用程序。Net Framework(例如,为BDD使用SpecFlow.NetCore(打开NuGet Manager以删除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错误。

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

相关内容

最新更新