asp.net-core - .NET 核心构建输出包含大量 DLL 文件

标签 asp.net-core .net-core

我有大约 30 个项目的 .NET Core 解决方案,但我没有得到一件事 - 每个项目编译的 Bin 输出都非常大。基本上它包含一大堆 Microsoft.AspNetcore.* 和 System.* 程序集,这使得输出大约为 15-30mb(即使对于非常小的项目)。
该解决方案分为较小的项目,目的是减少耦合,但现在它带来的麻烦多于帮助 - 所有编译项目的总体大小约为 700mb..

我同意“启动”/“复合根”项目是可以的,所有东西都应该放在一个地方,但现在看起来每个项目都是“发布”的,或者像编译为“独立”而不使用已安装的框架.

这本身不是问题,但它使解决方案在 CI/CD、发布工件等方面不那么健壮。有什么想法可能是错误的?真的像设计的那样吗?

一个可能的原因是由于某些历史原因,我的解决方案针对 net461(又名“完整”.NET Framework)。但是我正在考虑将所有内容移植到 netcoreapp1.x/netstandard。我试图用一些项目来做 - 它看起来像“库”项目它只复制几个程序集,但对于其他一些项目(例如用 xUnit 编写的测试) - 仍然有很多“基于框架的”DLL,可以从全局缓存或 smth 中使用。即使在 net461 当前情况仍然有点奇怪。

我还试图将所有构建的工件放在 CI 服务器上的一个文件夹中,但它还有其他问题 - 例如第三方库冲突,当在不同项目中使用不同版本库时。对于第三方库来说这是可以理解的,但是“框架”库可能会“更智能”。

仅供引用,被复制到 Bin 输出的完整程序集列表:

Autofac.dll
Autofac.Extensions.DependencyInjection.dll
AutoMapper.dll
FluentAssertions.Core.dll
FluentAssertions.dll
JetBrains.Annotations.dll
Microsoft.AspNetCore.Antiforgery.dll
Microsoft.AspNetCore.Authorization.dll
Microsoft.AspNetCore.Cors.dll
Microsoft.AspNetCore.Cryptography.Internal.dll
Microsoft.AspNetCore.DataProtection.Abstractions.dll
Microsoft.AspNetCore.DataProtection.dll
Microsoft.AspNetCore.Diagnostics.Abstractions.dll
Microsoft.AspNetCore.Diagnostics.dll
Microsoft.AspNetCore.Hosting.Abstractions.dll
Microsoft.AspNetCore.Hosting.dll
Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
Microsoft.AspNetCore.Html.Abstractions.dll
Microsoft.AspNetCore.Http.Abstractions.dll
Microsoft.AspNetCore.Http.dll
Microsoft.AspNetCore.Http.Extensions.dll
Microsoft.AspNetCore.Http.Features.dll
Microsoft.AspNetCore.HttpOverrides.dll
Microsoft.AspNetCore.JsonPatch.dll
Microsoft.AspNetCore.Localization.dll
Microsoft.AspNetCore.Mvc.Abstractions.dll
Microsoft.AspNetCore.Mvc.ApiExplorer.dll
Microsoft.AspNetCore.Mvc.Core.dll
Microsoft.AspNetCore.Mvc.Cors.dll
Microsoft.AspNetCore.Mvc.DataAnnotations.dll
Microsoft.AspNetCore.Mvc.dll
Microsoft.AspNetCore.Mvc.Formatters.Json.dll
Microsoft.AspNetCore.Mvc.Localization.dll
Microsoft.AspNetCore.Mvc.Razor.dll
Microsoft.AspNetCore.Mvc.Razor.Host.dll
Microsoft.AspNetCore.Mvc.TagHelpers.dll
Microsoft.AspNetCore.Mvc.Versioning.dll
Microsoft.AspNetCore.Mvc.ViewFeatures.dll
Microsoft.AspNetCore.Razor.dll
Microsoft.AspNetCore.Razor.Runtime.dll
Microsoft.AspNetCore.ResponseCaching.Abstractions.dll
Microsoft.AspNetCore.Routing.Abstractions.dll
Microsoft.AspNetCore.Routing.dll
Microsoft.AspNetCore.Server.IISIntegration.dll
Microsoft.AspNetCore.Server.Kestrel.dll
Microsoft.AspNetCore.WebUtilities.dll
Microsoft.CodeAnalysis.CSharp.dll
Microsoft.CodeAnalysis.dll
Microsoft.DotNet.PlatformAbstractions.dll
Microsoft.Extensions.Caching.Abstractions.dll
Microsoft.Extensions.Caching.Memory.dll
Microsoft.Extensions.Configuration.Abstractions.dll
Microsoft.Extensions.Configuration.Binder.dll
Microsoft.Extensions.Configuration.dll
Microsoft.Extensions.Configuration.EnvironmentVariables.dll
Microsoft.Extensions.Configuration.FileExtensions.dll
Microsoft.Extensions.Configuration.Json.dll
Microsoft.Extensions.DependencyInjection.Abstractions.dll
Microsoft.Extensions.DependencyInjection.dll
Microsoft.Extensions.DependencyModel.dll
Microsoft.Extensions.FileProviders.Abstractions.dll
Microsoft.Extensions.FileProviders.Composite.dll
Microsoft.Extensions.FileProviders.Physical.dll
Microsoft.Extensions.FileSystemGlobbing.dll
Microsoft.Extensions.Globalization.CultureInfoCache.dll
Microsoft.Extensions.Localization.Abstractions.dll
Microsoft.Extensions.Localization.dll
Microsoft.Extensions.Logging.Abstractions.dll
Microsoft.Extensions.Logging.Console.dll
Microsoft.Extensions.Logging.dll
Microsoft.Extensions.ObjectPool.dll
Microsoft.Extensions.Options.ConfigurationExtensions.dll
Microsoft.Extensions.Options.dll
Microsoft.Extensions.PlatformAbstractions.dll
Microsoft.Extensions.Primitives.dll
Microsoft.Extensions.WebEncoders.dll
Microsoft.Net.Http.Headers.dll
Microsoft.Win32.Primitives.dll
Newtonsoft.Json.dll
NLog.dll
NLog.Extensions.Logging.dll
NLog.Web.AspNetCore.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Immutable.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Console.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.StackTrace.dll
System.Globalization.Calendars.dll
System.IO.Compression.dll
System.IO.FileSystem.dll
System.IO.FileSystem.Primitives.dll
System.Net.Http.dll
System.Net.Sockets.dll
System.Numerics.Vectors.dll
System.Reflection.Metadata.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Text.Encoding.CodePages.dll
System.Text.Encodings.Web.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Thread.dll
System.ValueTuple.dll
System.Xml.ReaderWriter.dll
System.Xml.XmlDocument.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll

最佳答案

好像是我自己找到的。。有CopyLocalLockFileAssembliesCopyNuGetImplementations .NET Core 项目的标志(即新式 *.csproj 文件)。

对于 .NET Core,它是:

<!-- dependencies coming from the package manager lock file should not be copied locally for .NET Core and .NETStandard projects -->
<CopyLocalLockFileAssemblies Condition="'$(CopyLocalLockFileAssemblies)' == ''">false</CopyLocalLockFileAssemblies>

对于 .NET Framework,由于某种原因,它被设置为“true”。因此二进制文件的大小如此之大。

关于 xUnit 项目 - 他们也覆盖这些标志并将它们设置为 true。实际上,当您使用 dotnet xunit 时,测试正在使它们“错误”。或 dotnet test ,但如果你想使用 xUnit console runner,它应该是真正的“真实” .

它并没有真正帮助我,但至少它解释了为什么会发生..
项目只有一个类,大约 5kb,但二进制输出为 16Mb,这真的很令人沮丧。

关于asp.net-core - .NET 核心构建输出包含大量 DLL 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45483047/

相关文章:

angularjs - 网络核心。有 Angular 的。静态页面和html5模式

c# - 分页和页面冲突 - ASP.Net Core Razor 页面与 MVC Controller 方法分页冲突

image - 如何上传带有描述和标题等元数据的图像

c# - 为什么C#编译器在嵌套范围内允许重复的变量?

c# - 了解 .NET Core 和 Entity Framework 的版本

c# - 在 Kestrel、helios、WebListener 和单独的控制台进程中托管 Asp.Net vNext 应用程序有何不同?

C# .NET 核心获取当前用户 ID 的最佳方式

c# - C#中如何处理异步方法和IDisposable?

ruby - 无法在 Linux 中构建 .NET Core 控制台应用程序

c# - 在这种情况下如何正确使用泛型和类型约束?