未使用のを取り除く方法.の内容を読み込みからDLL
背景
クラスライブラリプロジェクトがBlazor WebSsemblyアプリケーションプロジェクトから参照されるシナリオを想像してください.
![](https://s1.md5.ltd/image/1cb238c3001bd9b6970711ee614ea8c8.png)
そして、このシナリオでは、クラスライブラリから公開されたすべての型は、何らかの理由でリリースビルドのBlazorアプリでは使用されません.
(条件付きコンパイルによって制御される可能性があります.
この場合、多分クラスライブラリを期待します.DLLファイルは“イルリンカ”の機能をトリミングして“リリース”の設定で公開されたBlazorアプリにロードされません.
しかし、予想外に、クラスライブラリ.DLLファイルはどこにでも使用されていませんが、ブラウザに読み込まれます.😱
![](https://s1.md5.ltd/image/0dc2123dbb59a0cf20d06b764f83e53d.png)
解決策
未使用クラスライブラリの読み込みを避けるためのソリューションです.ファイルを追加するには
AssemblyMetadata("IsTrimmable", "True")
クラスライブラリのコードをアセンブリレベルとして属性.// This code should be added somewhere .cs files in the class library.
[assembly: System.Reflection.AssemblyMetadata("IsTrimmable", "True")]
その後、ブラウザはクラスライブラリを読み込みません.DLLファイルは、クラスライブラリがどこにも使用されていない場合.🎉![](https://s1.md5.ltd/image/cefc27bb0b1924c5edc5ea6efcd3f9cd.png)
フォー.ネット5
残念ながら
AssemblyMetadata("IsTrimmable", "True")
属性は全く影響しません.NET 5プラットフォーム.解決策このシナリオのNET 5プラットフォームでは、このようにBlazor WebSassMetアプリケーションのプロジェクトファイル内にMSBuildスクリプトの一部を追加することです.
<!-- This is a .csproj file of a Blazor WebAssembly app, not a class library. -->
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
...
<Target Name="_ConfigureAssemblyLevelTrimming" BeforeTargets="PrepareForILLink">
<ItemGroup>
<ManagedAssemblyToLink Condition="'%(Filename)' == 'SampleLib'">
<IsTrimmable>true</IsTrimmable>
</ManagedAssemblyToLink>
</ItemGroup>
</Target>
...
クラスライブラリがNUGETパッケージとしてパックされる場合、上記のようなMSBuildスクリプトもNuGetパッケージファイルに含まれ、パッケージを参照するプロジェクトに自動的にインポートされるように構成されます.これはプラットフォームより簡単な方法ではありません.ネット6またはそれ以降の方法はありません.NET 5プラットフォーム.
そして覚えておいてください.NET 5は2022年5月8日になります.
公文書
詳細については、マイクロソフトの公式文書サイトをご覧ください.
📄 "Trim additional assemblies | Microsoft Docs"
公式文書について
<TrimmableAssembly/>
MSBuildアイテムも.しかし、この記事では、私はそれに言及しない
<TrimmableAssembly/>
MSBuildアイテムはあまり重要ではありません.Reference
この問題について(未使用のを取り除く方法.の内容を読み込みからDLL), 我々は、より多くの情報をここで見つけました https://dev.to/j_sakamoto/how-to-get-rid-of-unused-dll-from-loading-contents-on-blazor-webassembly-apps-5ga7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol