1 问题
项目发布后总会有很多无用的文件夹,比如以语言名命名的几十个文件夹,如zh_CN,zh_TW,
有很多无用的库,比如Microsoft.CodeAnalysis.dll,Microsoft.VisualStudio.Web.CodeGeneration
手工删除很麻烦。
处理后以下文件都不见了,发布的项目文件数量大幅减少:
以下文件都清理掉了 | 以下文件夹清理掉了 |
Humanizer.dll | en-US |
Microsoft.AspNetCore.Components.QuickGrid.dll | en-AU |
Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter.dll | nl-BE |
Microsoft.AspNetCore.Razor.Language.dll | en-CA |
Microsoft.Build.dll | zh-HK |
Microsoft.Build.Framework.dll | zh-SG |
Microsoft.CodeAnalysis.AnalyzerUtilities.dll | zh |
Microsoft.CodeAnalysis.CSharp.dll | zh-CN |
Microsoft.CodeAnalysis.CSharp.Features.dll | zh-TW |
Microsoft.CodeAnalysis.CSharp.Workspaces.dll | en-BZ |
Microsoft.CodeAnalysis.dll | en-029 |
Microsoft.CodeAnalysis.Elfie.dll | en-IE |
Microsoft.CodeAnalysis.Features.dll | en-JM |
Microsoft.CodeAnalysis.Razor.dll | en-NZ |
Microsoft.CodeAnalysis.Scripting.dll | en-ZA |
Microsoft.CodeAnalysis.Workspaces.dll | en-TT |
Microsoft.Data.SqlClient.dll | en-GB |
Microsoft.Data.SqlClient.SNI.dll | fr-BE |
Microsoft.DiaSymReader.dll | fr-CA |
Microsoft.DotNet.Scaffolding.Shared.dll | fr-LU |
Microsoft.EntityFrameworkCore.Abstractions.dll | fr-CH |
Microsoft.EntityFrameworkCore.dll | de-AT |
Microsoft.EntityFrameworkCore.Relational.dll | de-LI |
Microsoft.EntityFrameworkCore.SqlServer.dll | de-LU |
Microsoft.Extensions.DependencyModel.dll | de-CH |
Microsoft.Identity.Client.dll | it-CH |
Microsoft.Identity.Client.Extensions.Msal.dll | no |
Microsoft.IdentityModel.Abstractions.dll | nb-NO |
Microsoft.IdentityModel.JsonWebTokens.dll | nn-NO |
Microsoft.IdentityModel.Logging.dll | pt-BR |
Microsoft.IdentityModel.Protocols.dll | es-AR |
Microsoft.IdentityModel.Protocols.OpenIdConnect.dll | es-BO |
Microsoft.IdentityModel.Tokens.dll | es-CL |
Microsoft.IO.RecyclableMemoryStream.dll | es-CO |
Microsoft.NET.StringTools.dll | es-CR |
Microsoft.SqlServer.Server.dll | es-DO |
Microsoft.VisualStudio.Web.CodeGeneration.Core.dll | es-EC |
Microsoft.VisualStudio.Web.CodeGeneration.dll | es-SV |
Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore.dll | es-GT |
Microsoft.VisualStudio.Web.CodeGeneration.Templating.dll | es-HN |
Microsoft.VisualStudio.Web.CodeGeneration.Utils.dll | es-MX |
Microsoft.VisualStudio.Web.CodeGenerators.Mvc.dll | es-ES |
Mono.TextTemplating.dll | es-NI |
NuGet.Common.dll | es-PA |
NuGet.Configuration.dll | es-PY |
NuGet.DependencyResolver.Core.dll | es-PE |
NuGet.Frameworks.dll | es-PR |
NuGet.LibraryModel.dll | es-UY |
NuGet.Packaging.dll | es-VE |
NuGet.ProjectModel.dll | sv-FI |
NuGet.Protocol.dll | |
NuGet.Versioning.dll | |
System.ClientModel.dll | |
System.CodeDom.dll | |
System.Composition.AttributedModel.dll | |
System.Composition.Convention.dll | |
System.Composition.Hosting.dll | |
System.Composition.Runtime.dll | |
System.Composition.TypedParts.dll | |
System.Configuration.ConfigurationManager.dll | |
System.DirectoryServices.AccountManagement.dll | |
System.DirectoryServices.dll | |
System.DirectoryServices.Protocols.dll | |
System.IdentityModel.Tokens.Jwt.dll | |
System.Memory.Data.dll | |
System.Reflection.MetadataLoadContext.dll | |
System.Runtime.Caching.dll | |
System.Security.Cryptography.ProtectedData.dll |
2. 解决办法
进入下图位置,将无用的库都删掉。
或者打开MyWebApp.csproj,直接改这个文件也可以。
3. 我的库的清理情况,
3.1 我的 .csproj 文件的清理项目
目标是减少发布时包含的无用库,仅保留 Razor Pages 项目常用及你可能实际用到的依赖。
分析思路如下:
1. Razor Pages 项目 通常不需要 Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter(Blazor 相关)。
2. Microsoft.VisualStudio.Web.CodeGeneration.Design、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools 只用于开发/设计期,发布时可通过 <PrivateAssets>all</PrivateAssets> 隐藏,或直接移除(如不再 Scaffold)。
3. Microsoft.EntityFrameworkCore.Abstractions、Microsoft.EntityFrameworkCore.Analyzers,Microsoft.EntityFrameworkCore.Relational 通常会被主包引用,可考虑移除。
4. 仅保留你实际代码中用到的第三方库(如 NLog、NPOI、SkiaSharp、Newtonsoft.Json、System.DirectoryServices 等),未用到的建议移除。
5. 其它库如 System.Security.Cryptography.Pkcs,如无证书/加密需求可移除。
3.2 推荐精简后的 .csproj 文件如下:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<AssemblyVersion>1.2.1.0</AssemblyVersion>
<FileVersion>1.2.1.0</FileVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CZGL.SystemInfo" Version="2.2.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.15" />
<PackageReference Include="NPOI" Version="2.7.2" />
<PackageReference Include="SkiaSharp" Version="3.116.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.DirectoryServices" Version="9.0.0" />
<!-- 如确实需要证书/加密功能再保留 -->
<!-- <PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.0" /> -->
</ItemGroup>
<ItemGroup>
<None Update="arial.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="CloudFlare_Origin_Certificate.pfx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
3.3 具体变更说明
• 移除了 Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter(Blazor 相关)。
• 移除了开发/设计期依赖(Microsoft.VisualStudio.Web.CodeGeneration.Design、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools、Microsoft.EntityFrameworkCore.Abstractions、Microsoft.EntityFrameworkCore.Analyzers)。
• 保留了常用的日志、Excel、图形、EF Core、Json、AD 相关库。
• System.Security.Cryptography.Pkcs 如无证书/加密需求建议移除。