Runtime: デッドコードをクリーンアップする

作成日 2017年04月05日  ·  152コメント  ·  ソース: dotnet/runtime

.NETCoreAppバイナリのモノリンカーを有効にした後、デッドコードがある場所がいくつか特定されました。

これらは3つのカテゴリに分類されます。

  1. アセンブリのどこにも使用されていない本当にデッドコード。

    • これは削除できます

  2. アセンブリの1つのビルドで使用されるが、すべてではないソースファイル。 一部のプロジェクトがソースを使用しているが、すべてではない一般的なソースファイル。

    • これらはより適切に因数分解され、必要に応じて最小限のソースを提供するために分割されます。 または、本当にデッドコードが含まれている可能性があります。

  3. 時間のみのソースをコンパイルします。 ILを呼び出す際にリテラルとして表され、公開されていない内部定数。

    • これらは残しておく必要があります。

差分

  • [] [Microsoft.CSharp](http://tempcoverage.blob.core.windows.net/report2/Microsoft.CSharp.diff.html)( csv
  • [] [Microsoft.VisualBasic](http://tempcoverage.blob.core.windows.net/report2/Microsoft.VisualBasic.diff.html)( csv
  • [x] [System.Collections.Concurrent](http://tempcoverage.blob.core.windows.net/report2/System.Collections.Concurrent.diff.html)( csv
  • [x] [System.Collections](http://tempcoverage.blob.core.windows.net/report2/System.Collections.diff.html)( csv )-PR dotnet / corefx#19140 by @YoupHulsebos
  • [x] [System.Collections.Immutable](http://tempcoverage.blob.core.windows.net/report2/System.Collections.Immutable.diff.html)( csv-httpsで@YoupHulsebosによって削除するものはありません: //github.com/dotnet/corefx/issues/17905#issuecomment-298154133
  • [x] [System.Collections.NonGeneric](http://tempcoverage.blob.core.windows.net/report2/System.Collections.NonGeneric.diff.html)( csv-httpsで@YoupHulsebosによって削除するものはありません: //github.com/dotnet/corefx/issues/17905#issuecomment-298154133
  • [x] [System.Collections.Specialized](http://tempcoverage.blob.core.windows.net/report2/System.Collections.Specialized.diff.html)( csv
  • [x] [System.ComponentModel.Annotations](http://tempcoverage.blob.core.windows.net/report2/System.ComponentModel.Annotations.diff.html)( csv )@norek
  • [x] [System.ComponentModel](http://tempcoverage.blob.core.windows.net/report2/System.ComponentModel.diff.html)( csv )@norek
  • [x] [System.ComponentModel.EventBasedAsync](http://tempcoverage.blob.core.windows.net/report2/System.ComponentModel.EventBasedAsync.diff.html)( csv )@norek
  • [x] [System.ComponentModel.Primitives](http://tempcoverage.blob.core.windows.net/report2/System.ComponentModel.Primitives.diff.html)( csv )@norek
  • [x] [System.ComponentModel.TypeConverter](http://tempcoverage.blob.core.windows.net/report2/System.ComponentModel.TypeConverter.diff.html)( csv )@norek
  • [x] [System.Console](http://tempcoverage.blob.core.windows.net/report2/System.Console.diff.html)( csv
  • [x] [System.Data.Common](http://tempcoverage.blob.core.windows.net/report2/System.Data.Common.diff.html)( csv )-dotnet / corefx#19141で@によって修正されましたYoupHulsebos
  • [x] [System.Diagnostics.Debug](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.Debug.diff.html)( csv
  • [x] [System.Diagnostics.DiagnosticSource](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.DiagnosticSource.diff.html)( csv
  • [x] [System.Diagnostics.FileVersionInfo](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.FileVersionInfo.diff.html)( csv
  • [x] [System.Diagnostics.Process](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.Process.diff.html)( csv
  • [x] [System.Diagnostics.StackTrace](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.StackTrace.diff.html)( csv
  • [x] [System.Diagnostics.TextWriterTraceListener](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.TextWriterTraceListener.diff.html)( csv
  • [x] [System.Diagnostics.Tools](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.Tools.diff.html)( csv
  • [x] [System.Diagnostics.TraceSource](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.TraceSource.diff.html)( csv
  • [x] [System.Diagnostics.Tracing](http://tempcoverage.blob.core.windows.net/report2/System.Diagnostics.Tracing.diff.html)( csv
  • [x] [System.Drawing.Primitives](http://tempcoverage.blob.core.windows.net/report2/System.Drawing.Primitives.diff.html)( csv
  • [] [System.IO.Compression](http://tempcoverage.blob.core.windows.net/report2/System.IO.Compression.diff.html)( csv
  • [x] [System.IO.Compression.ZipFile](http://tempcoverage.blob.core.windows.net/report2/System.IO.Compression.ZipFile.diff.html)( csv
  • [] [System.IO.FileSystem.AccessControl](http://tempcoverage.blob.core.windows.net/report2/System.IO.FileSystem.AccessControl.diff.html)( csv
  • [] [System.IO.FileSystem](http://tempcoverage.blob.core.windows.net/report2/System.IO.FileSystem.diff.html)( csv
  • [x] [System.IO.FileSystem.DriveInfo](http://tempcoverage.blob.core.windows.net/report2/System.IO.FileSystem.DriveInfo.diff.html)( csv
  • [x] [System.IO.FileSystem.Watcher](http://tempcoverage.blob.core.windows.net/report2/System.IO.FileSystem.Watcher.diff.html)( csv
  • [x] [System.IO.IsolatedStorage](http://tempcoverage.blob.core.windows.net/report2/System.IO.IsolatedStorage.diff.html)( csv
  • [x] [System.IO.MemoryMappedFiles](http://tempcoverage.blob.core.windows.net/report2/System.IO.MemoryMappedFiles.diff.html)( csv
  • [x] [System.IO.Pipes](http://tempcoverage.blob.core.windows.net/report2/System.IO.Pipes.diff.html)( csv
  • [x] [System.Linq](http://tempcoverage.blob.core.windows.net/report2/System.Linq.diff.html)( csv )-削除するものはありません、https://github.com/dotnet / corefx / issues / 17905#issuecomment-294286344 by @JonHanna
  • [x] [System.Linq.Expressions](http://tempcoverage.blob.core.windows.net/report2/System.Linq.Expressions.diff.html)( csv
  • [x] [System.Linq.Parallel](http://tempcoverage.blob.core.windows.net/report2/System.Linq.Parallel.diff.html)( csv )-dotnet / corefx#19143で@によって修正されましたYoupHulsebos
  • [x] [System.Linq.Queryable](http://tempcoverage.blob.core.windows.net/report2/System.Linq.Queryable.diff.html)( csv )-削除するものはありません-https:// github .com / dotnet / corefx / issues / 17905#issuecomment-294286344 by @JonHanna
  • [] [System.Net.Http](http://tempcoverage.blob.core.windows.net/report2/System.Net.Http.diff.html)( csv
  • [] [System.Net.HttpListener](http://tempcoverage.blob.core.windows.net/report2/System.Net.HttpListener.diff.html)( csv
  • [x] [System.Net.Mail](http://tempcoverage.blob.core.windows.net/report2/System.Net.Mail.diff.html)( csv )-dotnet / corefx#19532で@によって修正されましたErmiar
  • [x] [System.Net.NameResolution](http://tempcoverage.blob.core.windows.net/report2/System.Net.NameResolution.diff.html)( csv
  • [] [System.Net.NetworkInformation](http://tempcoverage.blob.core.windows.net/report2/System.Net.NetworkInformation.diff.html)( csv
  • [x] [System.Net.Ping](http://tempcoverage.blob.core.windows.net/report2/System.Net.Ping.diff.html)( csv
  • [] [System.Net.Primitives](http://tempcoverage.blob.core.windows.net/report2/System.Net.Primitives.diff.html)( csv
  • [] [System.Net.Requests](http://tempcoverage.blob.core.windows.net/report2/System.Net.Requests.diff.html)( csv
  • [] [System.Net.Security](http://tempcoverage.blob.core.windows.net/report2/System.Net.Security.diff.html)( csv
  • [x] [System.Net.ServicePoint](http://tempcoverage.blob.core.windows.net/report2/System.Net.ServicePoint.diff.html)( csv
  • [] [System.Net.Sockets](http://tempcoverage.blob.core.windows.net/report2/System.Net.Sockets.diff.html)( csv
  • [] [System.Net.WebClient](http://tempcoverage.blob.core.windows.net/report2/System.Net.WebClient.diff.html)( csv
  • [] [System.Net.WebHeaderCollection](http://tempcoverage.blob.core.windows.net/report2/System.Net.WebHeaderCollection.diff.html)( csv
  • [x] [System.Net.WebProxy](http://tempcoverage.blob.core.windows.net/report2/System.Net.WebProxy.diff.html)( csv
  • [] [System.Net.WebSockets.Client](http://tempcoverage.blob.core.windows.net/report2/System.Net.WebSockets.Client.diff.html)( csv
  • [] [System.Net.WebSockets](http://tempcoverage.blob.core.windows.net/report2/System.Net.WebSockets.diff.html)( csv
  • [x] [System.Numerics.Vectors](http://tempcoverage.blob.core.windows.net/report2/System.Numerics.Vectors.diff.html)( csv
  • [x] [System.ObjectModel](http://tempcoverage.blob.core.windows.net/report2/System.ObjectModel.diff.html)( csv
  • [] [System.Private.DataContractSerialization](http://tempcoverage.blob.core.windows.net/report2/System.Private.DataContractSerialization.diff.html)( csv
  • [] [System.Private.Uri](http://tempcoverage.blob.core.windows.net/report2/System.Private.Uri.diff.html)( csv
  • [x] [System.Private.Xml](http://tempcoverage.blob.core.windows.net/report2/System.Private.Xml.diff.html)( csv
  • [x] [System.Private.Xml.Linq](http://tempcoverage.blob.core.windows.net/report2/System.Private.Xml.Linq.diff.html)( csv
  • [x] [System.Reflection.DispatchProxy](http://tempcoverage.blob.core.windows.net/report2/System.Reflection.DispatchProxy.diff.html)( csv
  • [x] [System.Reflection.Metadata](http://tempcoverage.blob.core.windows.net/report2/System.Reflection.Metadata.diff.html)( csv
  • [x] [System.Reflection.TypeExtensions](http://tempcoverage.blob.core.windows.net/report2/System.Reflection.TypeExtensions.diff.html)( csv
  • [x] [System.Resources.Writer](http://tempcoverage.blob.core.windows.net/report2/System.Resources.Writer.diff.html)( csv
  • [x] [System.Runtime.CompilerServices.VisualC](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.CompilerServices.VisualC.diff.html)( csv
  • [] [System.Runtime](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.diff.html)( csv
  • [x] [System.Runtime.Extensions](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.Extensions.diff.html)( csv
  • [x] [System.Runtime.InteropServices](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.InteropServices.diff.html)( csv
  • [x] [System.Runtime.InteropServices.RuntimeInformation](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.InteropServices.RuntimeInformation.diff.html)( csv
  • [x] [System.Runtime.Numerics](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.Numerics.diff.html)( csv
  • [x] [System.Runtime.Serialization.Formatters](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.Serialization.Formatters.diff.html)( csv )-dotnet / corefxで修正済み#19148 by @yaelkeemink
  • [] [System.Runtime.Serialization.Primitives](http://tempcoverage.blob.core.windows.net/report2/System.Runtime.Serialization.Primitives.diff.html)( csv
  • [] [System.Security.AccessControl](http://tempcoverage.blob.core.windows.net/report2/System.Security.AccessControl.diff.html)( csv
  • [] [System.Security.Claims](http://tempcoverage.blob.core.windows.net/report2/System.Security.Claims.diff.html)( csv
  • [] [System.Security.Cryptography.Algorithms](http://tempcoverage.blob.core.windows.net/report2/System.Security.Cryptography.Algorithms.diff.html)( csv )@mccbraxton
  • [] [System.Security.Cryptography.Cng](http://tempcoverage.blob.core.windows.net/report2/System.Security.Cryptography.Cng.diff.html)( csv
  • [] [System.Security.Cryptography.Csp](http://tempcoverage.blob.core.windows.net/report2/System.Security.Cryptography.Csp.diff.html)( csv
  • [] [System.Security.Cryptography.Encoding](http://tempcoverage.blob.core.windows.net/report2/System.Security.Cryptography.Encoding.diff.html)( csv
  • [] [System.Security.Cryptography.OpenSsl](http://tempcoverage.blob.core.windows.net/report2/System.Security.Cryptography.OpenSsl.diff.html)( csv
  • [x] [System.Security.Cryptography.Primitives](http://tempcoverage.blob.core.windows.net/report2/System.Security.Cryptography.Primitives.diff.html)( csv
  • [x] [System.Security.Cryptography.X509Certificates](http://tempcoverage.blob.core.windows.net/report2/System.Security.Cryptography.X509Certificates.diff.html)( csv )-dotnet / corefxで修正#19144 by @yaelkeemink
  • [x] [System.Security.Principal](http://tempcoverage.blob.core.windows.net/report2/System.Security.Principal.diff.html)( csv )-削除するものはありません
  • [x] [Microsoft.Win32.Primitives](http://tempcoverage.blob.core.windows.net/report2/Microsoft.Win32.Primitives.diff.html)( csv
  • [x] [Microsoft.Win32.Registry](http://tempcoverage.blob.core.windows.net/report2/Microsoft.Win32.Registry.diff.html)( csv
  • [] [Microsoft.XmlSerializer.Generator](http://tempcoverage.blob.core.windows.net/report2/Microsoft.XmlSerializer.Generator.diff.html)( csv
  • [x] [System.Security.Principal.Windows](http://tempcoverage.blob.core.windows.net/report2/System.Security.Principal.Windows.diff.html)( csv )-dotnet / corefx#18267
  • [x] [System.Text.RegularExpressions](http://tempcoverage.blob.core.windows.net/report2/System.Text.RegularExpressions.diff.html)( csv )-dotnet / corefx#18134
  • [x] [System.Threading](http://tempcoverage.blob.core.windows.net/report2/System.Threading.diff.html)( csv )-dotnet / corefx#18134
  • [x] [System.Threading.Overlapped](http://tempcoverage.blob.core.windows.net/report2/System.Threading.Overlapped.diff.html)( csv )-dotnet / corefx#18134
  • [x] [System.Threading.Tasks.Dataflow](http://tempcoverage.blob.core.windows.net/report2/System.Threading.Tasks.Dataflow.diff.html)( csv )-dotnet / corefx#17998
  • [x] [System.Threading.Tasks.Extensions](http://tempcoverage.blob.core.windows.net/report2/System.Threading.Tasks.Extensions.diff.html)( csv )-削除するものはありません
  • [x] [System.Threading.Tasks.Parallel](http://tempcoverage.blob.core.windows.net/report2/System.Threading.Tasks.Parallel.diff.html)( csv )-削除するものはありません
  • [x] [System.Threading.Thread](http://tempcoverage.blob.core.windows.net/report2/System.Threading.Thread.diff.html)( csv )-削除するものはありません
  • [x] [System.Transactions.Local](http://tempcoverage.blob.core.windows.net/report2/System.Transactions.Local.diff.html)( csv
  • [x] [System.Web.HttpUtility](http://tempcoverage.blob.core.windows.net/report2/System.Web.HttpUtility.diff.html)( csv )-削除するものはありません
  • [x] [System.Xml.XPath.XDocument](http://tempcoverage.blob.core.windows.net/report2/System.Xml.XPath.XDocument.diff.html)( csv )-削除するものはありません

バックグラウンド

レポートは、ILLink(codegen team / cc @erozenfeldからのモノリンカービルド)を有効にし、出力を比較することによって生成されました。

相違点はWindowsビルドからのものであり、NETCore.Appの一部であるアセンブリのみに制限されています。

リンカを有効にすると、アセンブリのオブジェクトフォルダに「PreTrim」フォルダが作成されます(例: <corefx>\bin\obj\AnyOS.AnyCPU.Debug\Microsoft.CSharp\netstandard\PreTrim\Microsoft.CSharp.dll

トリミングされたアセンブリの中央コピーを有効にするには、プロパティBinPlaceILLinkTrimAssembly=trueを設定できます。これにより、事前にトリミングおよびトリミングされたすべてのアセンブリがbinの下のフォルダー<corefx>\bin\ILLinkTrimAssembly\netcoreapp-Windows_NT-Debug-x64にコピーされます。

この問題にリンクされているレポートを生成するには、AsmDiff.exeツールのコピーが必要です。 このツールはまだコアで利用できません。(https://github.com/dotnet/buildtools/issues/1420)を参照してください。 デスクトップバージョンのツールを使用している場合は、 AsmDiffCmd=<pathToAsmDiff.exe>を設定してレポートを有効にできます

リンカーは、https://github.com/dotnet/corefx/pull/17825がマージされた後にILLinkTrimAssembly=trueでビルドすることにより、任意のプロジェクト(NETCore.App内のプロジェクトだけでなく)に対して有効にできます。

図書館に取り組む方法

ライブラリを選び、それに取り組む予定のメモを書きます。

ライブラリの上記のhtmlレポートを開きます。 赤の線を探します。 これらは理論的には死んでいます。 このリポジトリのsrcフォルダーでコードを検索し、削除します。 ライブラリのレポートを続行し、そのようなデッドコードをすべて削除します。

しかし、いくつかの特別な場合があります:

  1. これは非常に一般的なものです。 「const」が付いているものはすべて無視してください。 これらはすべてコンパイラによってインライン化されたフィールドであり、ソースに保持したいと考えています。 通常、intとstrings。
  2. 「クラスSR」の「静的文字列」はすべて特別です。 C#ファイルを編集する代わりに、.resxファイルで一致するエントリを見つけて削除する必要があります。 ライブラリの.resxファイルはsrc\<library>\src\Resources\strings.resxあります。 これを行うと、ビルドによってSRが再生成されます。 「クラスSR」の他のものは無視してください。デッドとして表示される可能性のあるメソッドがいくつかあります。
  3. プライベートパラメーターレスコンストラクターは無視してください。 誤ってクラスをインスタンス化するのを防ぐために、これらをコードに含めています。コード内に保持したいと考えています。
  4. 他にコンストラクターがない場合は、パブリックパラメーターなしのコンストラクターを無視します。 これらは本物ではありません。
  5. 一部のコードはライブラリのフォルダの下にはなく、src \ commonにあります。 このコードは、別のライブラリが使用している可能性があるため、実際には死んでいない可能性があります。 理想的には、grepを使用して、ツリー内の他の誰かがそれを使用しているかどうかを確認します。使用している場合は、削除できます。 または、それを無視して、後で別のパスを実行できます。
  6. コードがUnix、UAPなどでのみ使用されている場合は、削除しないでください。 死んでいない可能性があります。 このタイプかどうかは、たとえば#if uapで囲まれているか、.csprojファイルにたとえば'$(TargetGroup)' == 'uap'"のような条件があるかどうかでわかります。

ライブラリからデッドコードを削除したら、ビルドされていることを確認します(ライブラリの「src」フォルダーで「msbuild」を実行します)。 そうでない場合は、逆方向に進みます。 ビルドされる場合は、次にテストのビルドと合格を確認します(「tests」フォルダーで「msbuild / t:buildandtest」を実行します)。 そうでない場合も、手順をたどります。

それがすべて良さそうなら、あなたは図書館のPRを出すことができます。 PRが入ったら、ここでチェックできます。

area-Meta easy enhancement untriaged up-for-grabs

全てのコメント152件

これは、差分をバイト単位で降順でリストした表です。 XMLにはすでに問題があります

| | | |
| -------------------------------------------------- ------ | --------------- | ------------ |
| ライブラリ| 削除されたバイト| %減少|
| 合計| 1221632 | 7.62%|
| Microsoft.XmlSerializer.Generator.dll | 392704 | 46.29%|
| System.Private.Xml.dll --dotnet / runtime#20506 | 93696 | 2.54%|
| System.Net.Http.dll | 42496 | 12.89%|
| System.Private.DataContractSerialization.dll | 39936 | 4.40%|
| System.ComponentModel.TypeConverter.dll | 36352 | 10.71%|
| System.Data.Common.dll | 36352 | 2.97%|
| System.IO.FileSystem.dll | 32768 | 26.56%|
| System.Net.HttpListener.dll | 32256 | 9.39%|
| System.Runtime.Extensions.dll | 31744 | 12.20%|
| System.Net.Mail.dll | 28672 | 10.81%|
| System.Net.Security.dll | 24064 | 9.73%|
| System.Security.Cryptography.X509Certificates.dll | 23552 | 15.13%|
| System.Net.WebSockets.Client.dll | 22016 | 27.22%|
| System.Net.Primitives.dll | 20992 | 21.58%|
| System.Net.Requests.dll | 20480 | 11.56%|
| System.IO.FileSystem.DriveInfo.dll | 18944 | 47.44%|
| System.Transactions.Local.dll | 17920 | 9.70%|
| System.Net.NetworkInformation.dll | 17408 | 15.45%|
| System.Net.NameResolution.dll | 15360 | 28.30%|
| System.Net.WebHeaderCollection.dll | 14336 | 34.57%|
| System.Net.Sockets.dll | 12288 | 5.35%|
| System.IO.FileSystem.Watcher.dll | 11776 | 28.40%|
| System.IO.Compression.dll | 11264 | 7.83%|
| System.Security.Cryptography.Algorithms.dll | 10240 | 7.04%|
| System.Threading.dll | 10240 | 15.15%|
| System.IO.Pipes.dll | 9728 | 14.18%|
| System.Diagnostics.Process.dll | 9216 | 7.83%|
| System.Security.Cryptography.Encoding.dll | 9216 | 22.22%|
| System.IO.MemoryMappedFiles.dll | 8704 | 19.77%|
| System.Security.Cryptography.Csp.dll | 8704 | 9.83%|
| System.Security.AccessControl.dll | 8192 | 7.69%|
| System.Security.Cryptography.Cng.dll | 7680 | 7.04%|
| System.Collections.dll | 7168 | 5.88%|
| System.Net.Ping.dll | 7168 | 15.05%|
| System.Console.dll | 6656 | 7.51%|
| System.Linq.Expressions.dll | 6656 | 1.03%|
| System.Security.Principal.Windows.dll | 6656 | 9.29%|
| Microsoft.Win32.Registry.dll | 6144 | 12.77%|
| System.Private.Uri.dll | 6144 | 5.41%|
| System.Net.WebClient.dll | 5632 | 8.27%|
| System.Private.Xml.Linq.dll | 5632 | 3.37%|
| Microsoft.CSharp.dll | 4096 | 0.78%|
| System.ComponentModel.Primitives.dll | 4096 | 16.00%|
| System.Reflection.Metadata.dll | 4096 | 0.81%|
| System.Threading.Tasks.Dataflow.dll | 4096 | 1.86%|
| System.Diagnostics.StackTrace.dll | 3584 | 20.59%|
| System.IO.FileSystem.AccessControl.dll | 3584 | 12.96%|
| System.Linq.Parallel.dll | 3584 | 1.41%|
| System.Text.RegularExpressions.dll | 3584 | 2.59%|
| System.IO.IsolatedStorage.dll | 3072 | 8.00%|
| System.Threading.Overlapped.dll | 3072 | 28.57%|
| System.Security.Claims.dll | 2560 | 5.32%|
| Microsoft.VisualBasic.dll | 2048 | 1.05%|
| System.Collections.Concurrent.dll | 2048 | 2.03%|
| System.Collections.NonGeneric.dll | 2048 | 4.44%|
| System.Diagnostics.TraceSource.dll | 2048 | 4.08%|
| System.Diagnostics.Tracing.dll | 2048 | 11.11%|
| System.Runtime.InteropServices.RuntimeInformation.dll | 2048 | 16.00%|
| System.Threading.Tasks.Parallel.dll | 2048 | 4.17%|
| Microsoft.Win32.Primitives.dll | 1536 | 17.65%|
| System.Collections.Specialized.dll | 1536 | 3.66%|
| System.ComponentModel.Annotations.dll | 1536 | 1.94%|
| System.Diagnostics.FileVersionInfo.dll | 1536 | 10.71%|
| System.Reflection.DispatchProxy.dll | 1536 | 5.36%|
| System.Resources.Writer.dll | 1536 | 7.69%|
| System.Runtime.Serialization.Formatters.dll | 1536 | 1.10%|
| System.Threading.Thread.dll | 1536 | 6.82%|
| System.ComponentModel.EventBasedAsync.dll | 1024 | 5.71%|
| System.Drawing.Primitives.dll | 1024 | 2.30%|
| System.IO.Compression.ZipFile.dll | 1024 | 6.90%|
| System.Linq.dll | 1024 | 0.69%|
| System.Linq.Queryable.dll | 1024 | 1.60%|
| System.Net.ServicePoint.dll | 1024 | 6.25%|
| System.ObjectModel.dll | 1024 | 2.63%|
| System.Runtime.InteropServices.dll | 1024 | 4.17%|
| System.Runtime.Numerics.dll | 1024 | 1.41%|
| System.Runtime.Serialization.Primitives.dll | 1024 | 7.69%|
| System.Security.Cryptography.Primitives.dll | 1024 | 2.41%|
| System.AppContext.dll | 512 | 8.33%|
| System.Collections.Immutable.dll | 512 | 0.26%|
| System.Diagnostics.DiagnosticSource.dll | 512 | 1.69%|
| System.Diagnostics.TextWriterTraceListener.dll | 512 | 4.35%|
| System.Globalization.Extensions.dll | 512 | 7.14%|
| System.Net.WebProxy.dll | 512 | 4.55%|
| System.Net.WebSockets.dll | 512 | 2.50%|
| System.Numerics.Vectors.dll | 512 | 0.32%|
| System.Reflection.Primitives.dll | 512 | 7.14%|
| System.Reflection.TypeExtensions.dll | 512 | 3.57%|
| System.Runtime.dll | 512 | 1.43%|
| System.Security.Cryptography.OpenSsl.dll | 512 | 6.25%|
| System.Xml.XmlSerializer.dll | 512 | 5.56%|
| System.Xml.XPath.XDocument.dll | 512 | 6.67%|

これは、新しい寄稿者が手に入れるのは非常に簡単な問題です。 htmファイルの1つを開いて、赤でマークされたソースを削除します。

飛び出す明らかなことは、生成されたSRクラスには、ほとんどの場合、使用されていない複数のメンバーがあり、すべて(または少なくともほとんど)のアセンブリに表示されることです。 それを修正する方法を理解すれば、それは私たちにいくつかの簡単なグローバルな改善を与える可能性があります。

また、 private constフィールドが表示される場合もあります。 それらはそのクラスの実装によって使用されますが、明らかに表示されたり、外部で使用されたりすることはありません。 これらの問題を「修正」することはおそらく価値がありません。

private constフィールドを使用するクラス実装が、アセンブリの外部に表示されるエントリポイントを介して到達可能である場合、フィールドは削除されません。

おそらく、ライブラリに内部が表示されている場合(たとえば、単体テストの場合)、誤検知が発生しますよね?

アセンブリにInternalsVisibleToがある場合、すべての内部もルートと見なされます。

わかった。 テストでリフレクションを使用して内部を取得する場合がいくつかあると思います。 しかし、テストを実行すると、それらはすぐに発見されます。

@mellinoe

飛び出す明らかなことは、生成されたSRクラスには、ほとんどの場合、使用されていない複数のメンバーがあり、すべての(または少なくともほとんどの)アセンブリに表示されることです。 それを修正する方法を理解すれば、それは私たちにいくつかの簡単なグローバルな改善を与える可能性があります。

私はすでに2月にパスを作成し、数百のデッドストリングを削除しました。 残りはほとんどありません。 これらは、文字列を参照するメソッド自体がトリミングされている場合だと思います。 その場合、もちろんresxをトリミングする必要があります。

@danmosemsft生成されたファイルで常に出力される、このメンバーのブロックを参照しています。

C# internal static string Format(string resourceFormat, object p1); internal static string Format(string resourceFormat, object p1, object p2); internal static string Format(string resourceFormat, object p1, object p2, object p3); internal static string Format(string resourceFormat, params object[] args);

多くの場合(少なくとも私の簡単なスキミングから😄)、最初のものだけが使用され、時には2番目のものが使用されます。 私がクリックしたもののいくつかでは、これは差分の最大のチャンクでした。

わかった。 テストでリフレクションを使用して内部を取得する場合がいくつかあると思います。 しかし、テストを実行すると、それらはすぐに発見されます。

私はすでにそれらのほとんどをカバーしました: https ://github.com/dotnet/corefx/pull/17825/commits/2277db969616a5ad4fd9f4a8118a3b4030ff62d3

私たちはすでに内側と外側のループをきれいにしています。

Dataflowのレポートによると、 System.Threading.Tasks.Dataflow.Internal.Threading名前空間の型は無効です。 それは真実ではありません、それらはデフォルト構成では死んでいます、しかしそれらを使用する他の構成があります。 提案された変更については、 https://github.com/dotnet/corefx/pull/17912を参照してください。

そのような他のタイプがある可能性がありますか? それらについてやるべきことはありますか?

このレポートは、Windows上のNETCoreAppのみを対象としています。 別の構成がまだそれらを使用している可能性があり、誰かがそれらを完全に削除しようとすると、-allConfigurationsビルドによってキャッチされます。 このような場合、上記の項目2で述べたように、ソースをif-def'ing / splitすることで、NETCoreApp構成を改善できます。 これは、dotnet / corefx#17912で行っていることのように見えます

リンカーを実行していない他の構成の差分を特定することに興味がある場合は、背景のセクションにリストした詳細を使用して、リンカーをオンにすることができます。 PRがマージされると、これは簡単になるので、待つだけでもかまいません。

@erozenfeldコンパイラによってインライン化されているという理由だけで定数を削除したくはありません。これは、コードの明確さが失われるためです。 しかし、一部の定数は実際には死んでおり、おそらく削除したいものもあります。

たとえば、 http://tempcoverage.blob.core.windows.net/report2/System.ComponentModel.TypeConverter.diff.htmlでは、 VSStandardCommands全体がデッドとしてマークされています。 一部は( public class StandardCommandsを介して)表示され、インライン化されています。 しかし、本当に死んでいる人もいます。例: cmdidThisWindow

どちらが後者のカテゴリにあるかを確認できると便利です。

そうです、コンパイラによってインライン化された定数をソースから削除することはできません。 ILLinkはmsilで動作し、真にデッドな定数と、どこにでもインライン化されているためにデッドになった定数を区別できません。

また、プライベートのデフォルトコンストラクターはデッドとしてフラグが立てられます。これは、偶発的なパラメーターなしの構築を防ぐためにエーテルであるため、通常は削除したくありません。 同じ理由で、それは避けられないと思います。 私が考える限り、コンパイル後は何の目的もありません。

上記の説明に従って「簡単」とマークします。 この問題に初めて貢献した人を何人か紹介する予定です。

誰かがファイルを選んだ場合は、作業の重複を避けるために、この問題についてそのように言ってください。

@danmosemsftここにもベンダーに送信したハウツーを追加しますか? たぶんそれをトップポストに追加するのが最善でしょう、すべての例外/避けるべきことを除いて...

@karelz完了

私はdiffをざっと見てみました。 それらにはあまりにも多くのノイズがあります-私が簡単で実用的なものを見つけるのは困難でした。 diff(consts、private parameterlessコンストラクターなど)からのノイズをフィルター処理して、簡単に実行できる項目だけを含めることはできますか?

CSVを開いて、好きなフィルターを適用できます。

マスターCSVをいじって、/ src / common内のどのコードが実際に機能していないかを確認すると便利です。

@erozenfeldここで何かが足りないかもしれません。 http://tempcoverage.blob.core.windows.net/report2/System.Reflection.DispatchProxy.diff.htmlに、 EventAccessorInfo.InterfaceRaiseMethodは無効であると記載されていますが、コンストラクターで設定されていますが、それ自体はそうではありません。死。
https://github.com/dotnet/corefx/blob/master/src/System.Reflection.DispatchProxy/src/System/Reflection/DispatchProxyGenerator.cs#L919

手に取って簡単に取り除けるので、準備ができていないと思います(私が間違っていると思われる場合は、自由に変更してください)

準備ができていないのかわかりませんが、手順はかなり明確です...ある種の良い紹介だと思います。 とにかく、ベンダーの人々はそれに着手します。 私はすでにいくつかを行い、すでにきれいな多くをチェックしました。

SR.GetResourceString( "...")を介して実行時にロードされる文字列:それが誤ってデッドとマークする他の何か。 残念ながら、まだいくつかの例がありますreturn SR.GetResourceString("PropertyCategory" + value, null);

それはコードレビューで捕らえられなければなりません。

スレッドをスキミングすると、結果にノイズの懸念があるように見えました。 繰り返しますが、私は強く感じません-それを元に戻してください;-)

大丈夫だよ :)

System.Transactions.Localには、現在アクセスされていないコードがありますが、分散トランザクションをサポートするための作業を行うと、最終的にはその一部にアクセスされるようになります。 私はこのコードを単に削除することをためらっています。

ここでMicrosoft.CSharpで特定されたデッドコードの一部とその他のコードをすでに削除しました(たとえば、dotnet / corefx#17948のようにExpressionBinder.BindPtrToArrayがデッドであることが分析で検出されませんでした)、残りは私の中にありますそのアセンブリの進行中のリファクタリングの一部としての光景。

@danmosemsft EventAccessorInfo.InterfaceRaiseMethodについて:get_InterfaceRaiseMethodが無効であり、set_InterfaceRaiseMethodがないため、プロパティが無効であると言っています。 コンストラクターのコードは、コンパイラーが生成したバッキングフィールドを設定しますk__BackingFieldとILLinkはフィールドを保持します。

@jimcarleyは理にかなっているので、上記のS.Transactions.Localを確認しました。 実際に死んでいるオッズとエンドがある場合は、ある時点でそれらを削除することをお勧めします。

@JonHanna ILLinkがそのコードが死んでいることを発見できるはずだったと信じているなら、 @ erozenfeldに知らせます。

@danmosemsft可能であれば、私は非常に感銘を受けます。ここで言及されているビットは、私が行う予定の削除のサブセットであるため、リストの項目がカバーされることを意味します。

@danmosemsft @JonHanna ILLinkは、メソッド内で到達不能コードを見つけようとはしません。 メソッドが到達可能である場合、メソッド内のすべてのil命令が到達可能であると想定します。

他の人の利益のために:別のケースがオフラインで発生しました。そこでは、intフィールドが、デッドとしてフラグが立てられたコンストラクターによって割り当てられていました。 ただし、そのフィールドは他の場所で読み取られていました。そのコンストラクターが削除されると、コンパイラーはフィールドが設定されないことを警告しました。 リーダーはデフォルト値を読み取っていました。 このような場合、デッドセッターを削除するときにフィールドを明示的に初期化する必要があります。

@erozenfeldこのコードは死んでいるように見えます: https ://github.com/dotnet/corefx/compare/master ... danmosemsft:dead.xml?expand = 1
しかし、死んだとしてフラグが立てられていませんでした。 これはIL(構造体のフィールド)にあります。 ILLinkは、相互運用で使用される場合など、構造体からフィールドを削除することを特に回避しますか?

この特定のケースでは、フィールドは暗黙の静的コンストラクターで初期化されるため、ILで使用されているように見えます。 それらをデッドコードとして検出するには、ILLinkは次のことを行う必要があります。

  • フィールドが静的コンストラクターで割り当てられており、値が他の場所で使用されていないことを検出します
  • これらのフィールドの割り当てには副作用はありません
  • 静的コンストラクターのメソッド本体を書き直して、これらのフィールドの割り当てを削除しますが、それ以外はすべてそのままにします。

ああ-もちろん。

https://github.com/dotnet/corefx/pull/18395/filesにあるので、これらに気づきました。他にも、死んでいるさまざまな定数があります(もちろん、ILLinkはすべての定数を表示しているため、わかりません。死んだように)そして人間だけが言うことができる初期化のようないくつかのものは副作用がありません。 ILLinkが見つけたはずのことは何もありません。

@huanwuSGENツールには400KBのデッドコードがあります。
これをすべて削除するのは合理的ですか、それとも進行中の作業ですか、このコードを使用しますか?

http://tempcoverage.blob.core.windows.net/report2/Microsoft.XmlSerializer.Generator.diff.htmlを参照してください

System.LinqおよびSystem.Linq.Queryableでフラグが立てられるコードは、使用される定数または共通ファイル内のメソッドのいずれかであり、同じクラスの他のメソッドがそのプロジェクトで使用されるため、それ以上の作業は必要ありません。

作成したツールを使用してデッドコードを特定しました。https://github.com/dotnet/corefx/pull/18395を参照してください。 コードを検証するための入力データとしてあなたのコードを使用しています。

過去に、私はRoslyn(18.5 kloc)で大規模な削除を行いました。これは、死んではならないコードを特定するのに優れています。https://github.com/dotnet/roslyn/pull/17630のコメントを参照してください。 つまり、リグレッション、テストの不完全な実装のため、デバッガーでのみ使用され、条件付きでコンパイルする必要があります。

@JonHannaありがとう! あなたの情報で更新されたトップの投稿。

dotnet / corefx#18414は、S.Linq.Expressionsの関連するデッドコードのほとんどを削除しました。 定数などを除いて、現在サポートされていない機能が移植された場合に関連する可能性のあるものがまだいくつかあります(それだけを要求する問題のあるものを含む)ので、今はそれ以上行わないのがおそらく最善でしょう。

良さそうですね、リストでチェックされています。 残りのほとんどは、最小限のクリーンアップのみが必要です。 SGENは主要な例外です( @huanwuは上記の質問を参照してください)

Microsoft.XmlSerializer.Generator.dllに関する上記の@zhenlanの質問-400KBのデッドコードがあります(!)...このコードは一時的にデッドですか、それともこの作業を終えて誰かが削除できますか? おそらく、ベンダーに多くの作業を依頼することができます。 私に知らせて。

@danmosemsftこれらはデッドコードではありません。 ほとんどのコードはSystem.Private.Xmlと共有されます。 プロジェクトファイルhttps://github.com/dotnet/corefx/blob/master/src/Microsoft.XmlSerializer.Generator/src/Microsoft.XmlSerializer.Generator.csprojを確認すると、ほとんどのコードファイルが下にあります。 $(SourceDir)SystemXmlSerialization

@huanwuリポジトリからコードを削除できない場合でも(他の人が使用しているため)、このアセンブリ内でコードが使用されていない場合、理想的にはコードをアセンブリにコンパイルしません。
ReflectionAwareCodeGen
XmlSerializationWriterCodeGen
XmlSerializationCodeGen
すべてが死んだクラスのようです。 理想的には、それらを独自のコードファイルに移動して、必要な場所でのみコンパイルできるようにすることができます。

ReflectionAwareCodeGenは実際には#if XMLSERIALIZERGENERATOR以内にあるため、このアセンブリで死んでいる場合は、完全に死んでいる可能性があります。

また、文字列の大部分はこのバイナリでは使用されていません。

このコードがこのアセンブリで無効になっている場合は、400 KB節約できるので、実行する価値があります。

こんにちは@danmosemsft 、デッドコードがどのように決定されるかを完全には理解していないかもしれませんが、何かが気分が悪くなります。

たとえば、diffファイルMicrosoft.XmlSerializer.Generatorは、 ReflectionAwareCodeGenを赤でマークしました。これは、ツールの観点からデッドコードとして解釈しました。 ただし、ここではMicrosoft.XmlSerializer.Generatorで明確に使用されています。 明確にするのを手伝ってもらえますか?

OK、ツールが実際に* CodeGenのチェーン全体をデッドコードとしてマークしているのがわかります。 私の前の質問を無視して、説明させてください。 Microsoft.XmlSerializer.Generatorプロジェクトは、最初のチェックインがありました。 一部のコードは一時的に停止しています。 これらは、さらに作業が行われるときに使用されます。 コードの完成に近づいたときに、ツールを再度実行できるのではないでしょうか。

@zhenlanそれはまさに私が想定したことです。 完了したコードは実際には先週でした:)おそらくこれはDCRです。 やることはもっとありますか?

@danmosemsftはい、あなたが想定したことは正しいです:)

Microsoft.XmlSerializer.Generator(Sgen)は、.NETCoreの一部として出荷されないCLIツールです。 SgenがS.Private.Xmlと共有するコードの一部については、バグ修正以外に大きなギャップはないと思います。ZBBの目標は5/10です。 Sgenのみの下にあるコードの部分については、実行する機能の作業が増えますが、リリース車両が異なるため、より多くの余裕が必要です。 これが明らかになることを願っています。

@erozenfeld残りの削除可能なコードの多くは、誰も使用しない一般的な共有ファイルの一部である可能性があります。 それぞれを手作業で分析するか、CSVの面倒な結合を行わないと、そのコードをクリーンアップすることはできません。 アセンブリのセット全体でILLinkを実行し、複数のアセンブリで使用されるファイルを合体させて、共通コードで何が機能していないかを示すこれらのHTMLレポートの1つを取得できるようにする簡単な方法はありますか?

一部のテストは製品コード(PathInternal.csなど)でコンパイルされるため、テストアセンブリにもマージする必要があります。 もちろん、Unixのものも共通のコードを使用しているためです。

@danmosemsft私のツールはそれを行うことができます。 つまり、コードベース全体で実行し、誤検知を含む行を自動的に削除し、ビルドと復帰を繰り返してからテストします。 最後に、それをGithubアカウントにプッシュして、プルリクエストを作成します。 おそらくかなりの作業が必要ですが、使用しない限り試行しないでください。 サブセットの結果については、 https://github.com/dotnet/corefx/pull/18395を参照してください

@danmosemsft

アセンブリのセット全体でILLinkを実行し、複数のアセンブリで使用されるファイルを合体させて、共通コードで何が機能していないかを示すこれらのHTMLレポートの1つを取得できるようにする簡単な方法はありますか?

いいえ、それを行う簡単な方法はありません。 ILLinkは、アセンブリの生成に使用されるソースファイルではなく、アセンブリで動作します。

@erozenfeldそれが私が意図したことではないと思います。 ILLinkがソース上で動作することは期待していません。 しかし、現時点では、バイナリXでデッドとして表示される共有ソースは、バイナリYまたはZで使用される可能性があるため、簡単に削除できません。概念的には、すべてのライブラリがILMergeなどの1つの大きなdllにまとめられていた場合、 pdbが適切に修正されていれば、デッドとして表示された一般的なコードを削除できます。 私の質問は、ILMergeがアセンブリを1つにマージして、そのアセンブリに対してクロージャ分析を実行できるかどうかでした。

@danmosemsftいいえ、ILLinkはILMergeのようにアセンブリを1つにマージすることはできません。 ILMergeがアセンブリ間で衝突する名前をどのように処理するかわかりません。 アセンブリAにクラスNCがあり、アセンブリBにクラスNCがある場合、深い意味で同一であることが証明できない限り、一般に、マージするときに両方を保持する(および一方または両方の名前を変更する)必要があります。

ガッチャ。 将来的にはアプローチが現れるかもしれません。 たいしたことじゃない。

また、CSVを処理することで実行できることもあります...

このデータはすべて、現在古くなっている可能性があります。 これについてさらに作業を行いたい場合は、おそらくレポートを再実行する必要があります。 上記の背景セクションでそれを行うための手順を見つけることができます。

System.Collections.ImmutableおよびSystem.Collections.NonGenericでフラグが立てられるコードは、使用される定数または共通ファイル内のメソッドであり、同じクラスの他のメソッドがそのプロジェクトで使用されるため、それ以上の作業は必要ありません。

ありがとう@YoupHulsebos 、トップ投稿が更新されました。

System.IO.FileSystem.WatcherおよびSystem.Security.Cryptography.Primitivesでフラグが立てられるコードは、使用される定数または共通ファイル内のメソッドのいずれかであり、同じクラスの他のメソッドがそのプロジェクトで使用されるため、それ以上の作業は必要ありません。

@yaelkeeminkは、更新されたチェックボックスに感謝します。

こんにちは、
初めての寄稿者として、それでよければSystem.Net.Mailライブラリに取り組みたいと思います。

はい、ありがとう! どうぞ。 障害物にぶつかった場合は、ここで新しい問題をファイルしてください(そしてルーティング用にタグを付けてください)。

System.Net.Mailのプルリクエストを作成し、契約に署名しました。

ありがとう@Ermiar! PRへのリンクで更新されたトップイシュー。

ここで初めて-私は以下を取ります:

System.IO.FileSystem.DriveInfo
System.IO.FileSystem.Watcher

🗄

素晴らしい、@ garfbradazにようこそ!
PRを送信するときにお知らせください。トップの投稿を更新します( @ViktorHofer 、今日はお手伝いできますか?)

もちろん。

@garfbradazデッドコードの可能性を削除した後、デスクトップとコアの両方のプロジェクトですべてのテストを実行することを確認してください。
これは、最初に実行することで実行できます。
corefxルートからbuild.cmdbuild.cmd -framework:netfxを取得し、その後、次のように個々のテストプロジェクトを実行します。
msbuild /t:RebuildAndTestおよびmsbuild /t:RebuildAndTest /p:TargetGroup=netfx

ヘルプが必要な場合は、遠慮なく私に連絡してください。 ご協力いただきありがとうございます!

ありがとう@ ViktorHofer / @ karelz-ゆっくりと耕します

誤検知がありました。dotnet/ corefx#19826は、この問題のコミット81506698によって削除されたコードで実装されています。 このメソッドは今のところ「デッド」ですが、.NETからDbProviderFactoriesを完全に戻すにはそこにいることが不可欠です。 したがって、dotnet / corefx#19826のPRがマージされると、復活します。

初めての寄稿者である私は、System.Linq.Expressionsでスイングをしたいと思います。

素晴らしい@mccbraxton! ヘルプが必要な場合は、私にpingしてください。

@ mccbraxtonSystem.Linq.Expressionsはすでにクリーンアップされているようです。 別の作品を撮りたいですか?

@ViktorHoferあなたは正しいです-間違って読んだに違いありません。 System.Security.Cryptography.Algorithmsはどうですか?

いいね! テーブルにあなたを追加しました。 ターゲットが使用しているコードは削除しないでください。 ご協力いただきありがとうございます!

dotnet / corefx#18162は、Microsoft.CSharpのレポートに残っている本当に死んだものを処理しました。

こんにちは、新しい投稿者です。System.ComponentModel。*を使用できます。

ありがとう@norekそれのために行きます。

こんにちは、System.ComponentModelの概要をご覧ください。

  • ルート-削除するものはありません
  • 。注釈-削除するものはありません
  • .EventBasedAsync-削除するものはありません
  • .Primitives-死んでいるとマークされていますが、そうではありません
  • .TypeConverters-いくつかのコードを削除します。 しかし、私は!=演算子と混同しています-それは死んでいるとマークされていますが、私はあなたのすべてのコーディングの信念を知りません-も削除する必要がありますか?

リストを確認していたところ、System.Diagnosticsでデッドコードが見つかりました- StackTraceSymbolsはデッドとしてマークされていますが、ソリューションエクスロラーでのこのクラスの名前はStackTraceSymbols.CoreCLR.csです。 クローズされた問題で見つかりました:dotnet / corefx#19368
そしてその死者かどうか?

@ mikem8361 SDStackTraceSymbolsをお持ちですか?

私はそれを所有しており、デッドコードではありません。 リフレクションは、System.Private.CoreLibによって使用され、このアセンブリをロードしてこのクラスを参照します。

したがって、coreclrは、未処理の例外スタックトレースにソース/行番号情報を出力できます。

@ mikem8361情報をありがとう。 illinktrim.xmlによって保護されているようです。

<linker>
  <assembly fullname="System.Diagnostics.StackTrace">
    <!-- used by System.Private.CoreLib StackTrace code to load portable pdbs for the runtime diagnostic stack trace to get source/line info -->
    <type fullname="System.Diagnostics.StackTraceSymbols" required="true" />
  </assembly>
</linker>

@ericstj @erozenfeld ILLinkが発行するCSVを修正して、コードを保持するように強制したときにコードがデッドとして表示されないようにすることはできますか?

私たちが持っているCSVは、トリミング後の単なる差分であるため、明示的にルート化されたものはありません。 この号でリンクされているデータは公開されていません。 これは、問題を開いたときの1回限りの実行からのものです。 ライブ情報を見ると、差分として表示されなくなったのではないかと思います。

こんにちは、私は初めての寄稿者です。 System.Net.HttpとSystem.Net.HttpListenerを試してみたいです。

@soapdoggはそれのために行きます。

前述の@AlexGhiondea

こんにちは。 Microsoft.VisulaBasicを取ることはできますか?

@satano確かに、どうぞ。 削除するビットはほんの数ビットのようです(上記の私の記事によると、すべてのconstフィールドとパラメーターなしのctorはそのままにしておく必要があります)。 おそらく、CSharpも実行できますか?

上記の分析が行われてから新しいライブラリもいくつかあります...

OK、CSharpとVisualBasicを実行します。

Microsoft.VisualBasicのPRの準備ができました。

Microsoft.CSharpに関して-diffファイルの赤いものはすべてすでに削除されています。 だから、問題にそれをマークするだけです。

この問題は初めての方にお任せしますか、それとも続行できますか?

@satano赤い差分を削除した変更を見つけてください。
続行してもかまいません。初めての人のためだけに保存​​するわけではありません。

それがすべてだったかどうかはわかりませんが、ここで何かが削除されました: https ://github.com/dotnet/corefx/commit/3eb339702e2fcdf924b50c2e32d7e9e02395e52f

@JonHannaはここでもそれを言ったhttps://github.com/dotnet/corefx/issues/17905#issuecomment-291924301

上から続けます。 次に、 System.IO.CompressionSystem.IO.FileSystem.AccessControl 、およびSystem.IO.FileSystem使用します。

@satanoはそれを求めます-許可を求める必要はありません。他の誰かが探している場合は、ここに投稿します。

誰かにとって興味深い「メタ問題」の1つは、同じリンカーツールを使用して、誰も使用していない一般的なコードを見つける方法があるかどうかです。 srccommonからプルされたクラスがライブラリによって部分的にしか使用されていない場合、この分析では死んで表示されますが、別のライブラリがクラスをプルして使用している可能性があるため、削除できません。 私が考えていたのは、アセンブリをマージしてからリンカーを実行する方法があるかどうかです。 @erozenfeldリンカーを使用してマージし、結果でデッドコードを見つけることができますか?

ILLinkは現在、アセンブリをマージできません。 これは、将来追加することを検討しているものです。 これを実行できるツールは他にもあります。https ://github.com/Microsoft/ILMergeとhttps://github.com/gluck/il-repackですが、このシナリオを希望どおりに処理できるかどうかはわかりません。 名前が衝突するタイプ/メソッド/フィールドが同一のエンティティを表すことを認識している場合と認識していない場合があります。

System.Net.HttpSystem.Net.HttpListenerSystem.Net.NetworkInformationを続けています。

System.Net.*全体を1つずつ受け取ります。

残りの部分を続けます: System.Private.*System.Runtime.*およびSystem.Security.*

@karelz

…赤い差分を削除した変更を見つけていただけますか?

dotnet / corefx#18162

ええと...おそらく、この問題を確認して、おそらくそれを閉じる時が来たのでしょうか?

このプロジェクトのデッドコードは削除され、マージされました。

  • Microsoft.CSharp(上記のコメントで述べたようにすでに実行されています)
  • Microsoft.VisualBasic
  • System.IO.Compression
  • System.IO.FileSystem
  • System.IO.FileSystem.AccessControl
  • System.Net.Http
  • System.Net.HttpListener
  • System.Net.NetworkInformation
  • System.Net.Primitives
  • System.Net.Requests
  • System.Net.Security
  • System.Net.Sockets
  • System.Net.WebClient
  • System.Net.WebSocket.Client
  • System.Private.DataContractSerialization
  • System.Private.Uri
  • System.Security.Cryptography.Cng
  • System.Security.Cryptography.Csp

私は残りのプロジェクトも調べましたが、それらには何の関係もありません。

  • System.Net.WebHeaderCollection
  • System.Net.WebSockets
  • System.Runtime
  • System.Runtime.Serialization.Primitives
  • System.Security.AccessControl
  • System.Security.Claims
  • System.Security.Cryptography.Algorithms
  • System.Security.Cryptography.Encoding
  • System.Security.Cryptography.OpenSsl

したがって、残っているプロジェクトはMicrosoft.XmlSerializer.Generatorだけです。 デッドコードのほとんどが含まれていますが、ここでいくつかのコメントに記載されているように、私が理解したように、そこで進行中の作業があります。

この問題は完了しましたか? できない場合はSystem.Consoleを取ることができますか?

@ Iroca88確かに。 上でリンクされているダンプは、現在少し古くなっている可能性があることに注意してください。

@danmosemsftに感謝します、新しいダンプを取得するための提案はありますか? それ以外の場合は、上記のダンプから始めます。

ところで: @ lroca88です、このタイプの混乱を避けるために最初の文字(L)を大文字にしました:)

@ Lroca88の一番上の投稿では、トリミングおよび事前トリミングされたアセンブリにアクセスする方法について説明しています。 それらを比較するために、公開されていないように見えるツールを使用しました。 両方でIlspyOnのような逆コンパイラーを使用して、結果に対してテキスト差分を実行できます。 それはおそらくうまくいくでしょう。

最近の差分を実行して共有します。 乞うご期待。

最新のものは次のとおりです。

  • [] [Microsoft.CSharp](http://tempcoverage.blob.core.windows.net/report3/Microsoft.CSharp.diff.html)( csv
  • [] [Microsoft.VisualBasic](http://tempcoverage.blob.core.windows.net/report3/Microsoft.VisualBasic.diff.html)( csv
  • [] [Microsoft.Win32.Primitives](http://tempcoverage.blob.core.windows.net/report3/Microsoft.Win32.Primitives.diff.html)( csv
  • [] [Microsoft.Win32.Registry](http://tempcoverage.blob.core.windows.net/report3/Microsoft.Win32.Registry.diff.html)( csv
  • [] [System.Collections.Concurrent](http://tempcoverage.blob.core.windows.net/report3/System.Collections.Concurrent.diff.html)( csv
  • [] [System.Collections](http://tempcoverage.blob.core.windows.net/report3/System.Collections.diff.html)( csv
  • [] [System.Collections.Immutable](http://tempcoverage.blob.core.windows.net/report3/System.Collections.Immutable.diff.html)( csv
  • [] [System.Collections.NonGeneric](http://tempcoverage.blob.core.windows.net/report3/System.Collections.NonGeneric.diff.html)( csv
  • [] [System.Collections.Specialized](http://tempcoverage.blob.core.windows.net/report3/System.Collections.Specialized.diff.html)( csv
  • [] [System.ComponentModel.Annotations](http://tempcoverage.blob.core.windows.net/report3/System.ComponentModel.Annotations.diff.html)( csv
  • [] [System.ComponentModel](http://tempcoverage.blob.core.windows.net/report3/System.ComponentModel.diff.html)( csv
  • [] [System.ComponentModel.EventBasedAsync](http://tempcoverage.blob.core.windows.net/report3/System.ComponentModel.EventBasedAsync.diff.html)( csv
  • [] [System.ComponentModel.Primitives](http://tempcoverage.blob.core.windows.net/report3/System.ComponentModel.Primitives.diff.html)( csv
  • [] [System.ComponentModel.TypeConverter](http://tempcoverage.blob.core.windows.net/report3/System.ComponentModel.TypeConverter.diff.html)( csv
  • [] [System.Console](http://tempcoverage.blob.core.windows.net/report3/System.Console.diff.html)( csv
  • [] [System.Data.Common](http://tempcoverage.blob.core.windows.net/report3/System.Data.Common.diff.html)( csv
  • [] [System.Diagnostics.DiagnosticSource](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.DiagnosticSource.diff.html)( csv
  • [] [System.Diagnostics.FileVersionInfo](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.FileVersionInfo.diff.html)( csv
  • [] [System.Diagnostics.Process](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.Process.diff.html)( csv
  • [] [System.Diagnostics.StackTrace](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.StackTrace.diff.html)( csv
  • [] [System.Diagnostics.TextWriterTraceListener](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.TextWriterTraceListener.diff.html)( csv
  • [] [System.Diagnostics.Tools](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.Tools.diff.html)( csv
  • [] [System.Diagnostics.TraceSource](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.TraceSource.diff.html)( csv
  • [] [System.Diagnostics.Tracing](http://tempcoverage.blob.core.windows.net/report3/System.Diagnostics.Tracing.diff.html)( csv
  • [] [System.Drawing.Primitives](http://tempcoverage.blob.core.windows.net/report3/System.Drawing.Primitives.diff.html)( csv
  • [] [System.IO.Compression.Brotli](http://tempcoverage.blob.core.windows.net/report3/System.IO.Compression.Brotli.diff.html)( csv
  • [] [System.IO.Compression](http://tempcoverage.blob.core.windows.net/report3/System.IO.Compression.diff.html)( csv
  • [] [System.IO.Compression.ZipFile](http://tempcoverage.blob.core.windows.net/report3/System.IO.Compression.ZipFile.diff.html)( csv
  • [] [System.IO.FileSystem.AccessControl](http://tempcoverage.blob.core.windows.net/report3/System.IO.FileSystem.AccessControl.diff.html)( csv
  • [] [System.IO.FileSystem](http://tempcoverage.blob.core.windows.net/report3/System.IO.FileSystem.diff.html)( csv
  • [] [System.IO.FileSystem.DriveInfo](http://tempcoverage.blob.core.windows.net/report3/System.IO.FileSystem.DriveInfo.diff.html)( csv
  • [] [System.IO.FileSystem.Watcher](http://tempcoverage.blob.core.windows.net/report3/System.IO.FileSystem.Watcher.diff.html)( csv
  • [] [System.IO.IsolatedStorage](http://tempcoverage.blob.core.windows.net/report3/System.IO.IsolatedStorage.diff.html)( csv
  • [] [System.IO.MemoryMappedFiles](http://tempcoverage.blob.core.windows.net/report3/System.IO.MemoryMappedFiles.diff.html)( csv
  • [] [System.IO.Pipes](http://tempcoverage.blob.core.windows.net/report3/System.IO.Pipes.diff.html)( csv
  • [] [System.Linq](http://tempcoverage.blob.core.windows.net/report3/System.Linq.diff.html)( csv
  • [] [System.Linq.Expressions](http://tempcoverage.blob.core.windows.net/report3/System.Linq.Expressions.diff.html)( csv
  • [] [System.Linq.Parallel](http://tempcoverage.blob.core.windows.net/report3/System.Linq.Parallel.diff.html)( csv
  • [] [System.Linq.Queryable](http://tempcoverage.blob.core.windows.net/report3/System.Linq.Queryable.diff.html)( csv
  • [] [System.Memory](http://tempcoverage.blob.core.windows.net/report3/System.Memory.diff.html)( csv
  • [] [System.Net.Http](http://tempcoverage.blob.core.windows.net/report3/System.Net.Http.diff.html)( csv
  • [] [System.Net.HttpListener](http://tempcoverage.blob.core.windows.net/report3/System.Net.HttpListener.diff.html)( csv
  • [] [System.Net.Mail](http://tempcoverage.blob.core.windows.net/report3/System.Net.Mail.diff.html)( csv
  • [] [System.Net.NameResolution](http://tempcoverage.blob.core.windows.net/report3/System.Net.NameResolution.diff.html)( csv
  • [] [System.Net.NetworkInformation](http://tempcoverage.blob.core.windows.net/report3/System.Net.NetworkInformation.diff.html)( csv
  • [] [System.Net.Ping](http://tempcoverage.blob.core.windows.net/report3/System.Net.Ping.diff.html)( csv
  • [] [System.Net.Primitives](http://tempcoverage.blob.core.windows.net/report3/System.Net.Primitives.diff.html)( csv
  • [] [System.Net.Requests](http://tempcoverage.blob.core.windows.net/report3/System.Net.Requests.diff.html)( csv
  • [] [System.Net.Security](http://tempcoverage.blob.core.windows.net/report3/System.Net.Security.diff.html)( csv
  • [] [System.Net.ServicePoint](http://tempcoverage.blob.core.windows.net/report3/System.Net.ServicePoint.diff.html)( csv
  • [] [System.Net.Sockets](http://tempcoverage.blob.core.windows.net/report3/System.Net.Sockets.diff.html)( csv
  • [] [System.Net.WebClient](http://tempcoverage.blob.core.windows.net/report3/System.Net.WebClient.diff.html)( csv
  • [] [System.Net.WebHeaderCollection](http://tempcoverage.blob.core.windows.net/report3/System.Net.WebHeaderCollection.diff.html)( csv
  • [] [System.Net.WebProxy](http://tempcoverage.blob.core.windows.net/report3/System.Net.WebProxy.diff.html)( csv
  • [] [System.Net.WebSockets.Client](http://tempcoverage.blob.core.windows.net/report3/System.Net.WebSockets.Client.diff.html)( csv
  • [] [System.Net.WebSockets](http://tempcoverage.blob.core.windows.net/report3/System.Net.WebSockets.diff.html)( csv
  • [] [System.Numerics.Vectors](http://tempcoverage.blob.core.windows.net/report3/System.Numerics.Vectors.diff.html)( csv
  • [] [System.ObjectModel](http://tempcoverage.blob.core.windows.net/report3/System.ObjectModel.diff.html)( csv
  • [] [System.Private.DataContractSerialization](http://tempcoverage.blob.core.windows.net/report3/System.Private.DataContractSerialization.diff.html)( csv
  • [] [System.Private.Uri](http://tempcoverage.blob.core.windows.net/report3/System.Private.Uri.diff.html)( csv
  • [] [System.Private.Xml](http://tempcoverage.blob.core.windows.net/report3/System.Private.Xml.diff.html)( csv
  • [] [System.Private.Xml.Linq](http://tempcoverage.blob.core.windows.net/report3/System.Private.Xml.Linq.diff.html)( csv
  • [] [System.Reflection.DispatchProxy](http://tempcoverage.blob.core.windows.net/report3/System.Reflection.DispatchProxy.diff.html)( csv
  • [] [System.Reflection.Metadata](http://tempcoverage.blob.core.windows.net/report3/System.Reflection.Metadata.diff.html)( csv
  • [] [System.Reflection.TypeExtensions](http://tempcoverage.blob.core.windows.net/report3/System.Reflection.TypeExtensions.diff.html)( csv
  • [] [System.Resources.Writer](http://tempcoverage.blob.core.windows.net/report3/System.Resources.Writer.diff.html)( csv
  • [] [System.Runtime.CompilerServices.VisualC](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.CompilerServices.VisualC.diff.html)( csv
  • [] [System.Runtime](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.diff.html)( csv
  • [] [System.Runtime.Extensions](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.Extensions.diff.html)( csv
  • [] [System.Runtime.InteropServices](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.InteropServices.diff.html)( csv
  • [] [System.Runtime.InteropServices.RuntimeInformation](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.InteropServices.RuntimeInformation.diff.html)( csv
  • [] [System.Runtime.InteropServices.WindowsRuntime](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.InteropServices.WindowsRuntime.diff.html)( csv
  • [] [System.Runtime.Numerics](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.Numerics.diff.html)( csv
  • [] [System.Runtime.Serialization.Formatters](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.Serialization.Formatters.diff.html)( csv
  • [] [System.Runtime.Serialization.Primitives](http://tempcoverage.blob.core.windows.net/report3/System.Runtime.Serialization.Primitives.diff.html)( csv
  • [] [System.Security.AccessControl](http://tempcoverage.blob.core.windows.net/report3/System.Security.AccessControl.diff.html)( csv
  • [] [System.Security.Claims](http://tempcoverage.blob.core.windows.net/report3/System.Security.Claims.diff.html)( csv
  • [] [System.Security.Cryptography.Algorithms](http://tempcoverage.blob.core.windows.net/report3/System.Security.Cryptography.Algorithms.diff.html)( csv
  • [] [System.Security.Cryptography.Cng](http://tempcoverage.blob.core.windows.net/report3/System.Security.Cryptography.Cng.diff.html)( csv
  • [] [System.Security.Cryptography.Csp](http://tempcoverage.blob.core.windows.net/report3/System.Security.Cryptography.Csp.diff.html)( csv
  • [] [System.Security.Cryptography.Encoding](http://tempcoverage.blob.core.windows.net/report3/System.Security.Cryptography.Encoding.diff.html)( csv
  • [] [System.Security.Cryptography.OpenSsl](http://tempcoverage.blob.core.windows.net/report3/System.Security.Cryptography.OpenSsl.diff.html)( csv
  • [] [System.Security.Cryptography.Primitives](http://tempcoverage.blob.core.windows.net/report3/System.Security.Cryptography.Primitives.diff.html)( csv
  • [] [System.Security.Cryptography.X509Certificates](http://tempcoverage.blob.core.windows.net/report3/System.Security.Cryptography.X509Certificates.diff.html)( csv
  • [] [System.Security.Principal](http://tempcoverage.blob.core.windows.net/report3/System.Security.Principal.diff.html)( csv
  • [] [System.Security.Principal.Windows](http://tempcoverage.blob.core.windows.net/report3/System.Security.Principal.Windows.diff.html)( csv
  • [] [System.Text.RegularExpressions](http://tempcoverage.blob.core.windows.net/report3/System.Text.RegularExpressions.diff.html)( csv
  • [] [System.Threading](http://tempcoverage.blob.core.windows.net/report3/System.Threading.diff.html)( csv
  • [] [System.Threading.Overlapped](http://tempcoverage.blob.core.windows.net/report3/System.Threading.Overlapped.diff.html)( csv
  • [] [System.Threading.Tasks.Dataflow](http://tempcoverage.blob.core.windows.net/report3/System.Threading.Tasks.Dataflow.diff.html)( csv
  • [] [System.Threading.Tasks.Parallel](http://tempcoverage.blob.core.windows.net/report3/System.Threading.Tasks.Parallel.diff.html)( csv
  • [] [System.Threading.Thread](http://tempcoverage.blob.core.windows.net/report3/System.Threading.Thread.diff.html)( csv
  • [] [System.Transactions.Local](http://tempcoverage.blob.core.windows.net/report3/System.Transactions.Local.diff.html)( csv
  • [] [System.ValueTuple](http://tempcoverage.blob.core.windows.net/report3/System.ValueTuple.diff.html)( csv
  • [] [System.Web.HttpUtility](http://tempcoverage.blob.core.windows.net/report3/System.Web.HttpUtility.diff.html)( csv
  • [] [System.Xml.XPath.XDocument](http://tempcoverage.blob.core.windows.net/report3/System.Xml.XPath.XDocument.diff.html)( csv

かっこいい、私は古いリストと格闘していました! 🔨

@ Lroca88は、このパスを実行する方法についてのトップ投稿のヒントを必ず読んでください。混乱を避けてください。

おっとっと。 dotnet / corefx#26491のMicrosoft.CSharpで新しく孤立した2つのビットを見逃しました。 すぐにわかります。

新しいリストから、System.Runtime、System.Web.HttpUtility、System.Linq、およびSystem.Linq.Queryableには、実際には無効ではない定数といくつかの共有コードのみが含まれています。 System.Linq.Expressionsには、デバッグビューで使用されるこれらの項目と、特定のコンパイラ定数で使用されるリソースが含まれているため、これら5つをすべてチェックできるように削除する必要があります。

@JonHannaによってレビューされたライブラリと、レビューしたライブラリをリストにマージしました。 時間の許す限りリストを更新し続けます。誰かがこのリストにアイテムを追加したい場合は、遠慮なく私にpingしてください。

ライブラリ| レビュー投稿者| 状態
-| -| -
Microsoft.CSharp(csv)| @JonHanna | dotnet / corefx#27104
Microsoft.VisualBasic(csv)| @ Lroca88 | 削除するものはありません
Microsoft.Win32.Primitives(csv)| @ Lroca88 | 削除するものはありません
Microsoft.Win32.Registry(csv)| @ Lroca88 | 削除するものはありません
System.Collections.Concurrent(csv)| @ Lroca88 | 削除するものはありません
System.Collections(csv)| @ Lroca88 | 削除するものはありません
System.Runtime(csv)| @JonHanna | 削除するものはありません
System.Web.HttpUtility(csv)| @JonHanna | 削除するものはありません
System.Linq(csv)| @JonHanna | 削除するものはありません
System.Linq.Queryable(csv)| @JonHanna | 削除するものはありません

ありがとう@ Lroca88

デッドコードがあまり残っていないのは驚きではありません。 ただし、冒頭で述べたように、このプロセスでは、srccommonのコードが無効であるかどうかを判断できません(あるアセンブリでは無効になっているが、別のアセンブリでは無効になっていない可能性があるため)。 それを解決する方法を見つけることに興味がある場合は、デッドコードが増える可能性があります。 たとえば、アセンブリをILMergeしてから、それらに対してデッドコード分析を実行することが可能かもしれません。 または、CSVを後処理して、すべてのCSVで無効になっている共通のコードを見つける方が簡単な場合があります。 @ericstjアイデアはありましたか?

@danmosemsftをお手伝いできることをうれしく思います。
私はあなたに同意します。このプロセスの改善について、私のレビューから、最もフラグが立てられたコードは死んでいないか、constsであるか、以前に言ったように別のアセンブリで頻繁に使用されます。 私の意見では、これらの誤検知を見ると、ハントは少し退屈になります。

残念ながら、ILMergeとデッドコード分析を実行する方法、またはCSVを後処理する方法がわかりません。 でも、皆さんが私を指導するのに時間を費やしたいのであれば、私は学び/協力したいと思っています:)

これはどこにありますか? OPは完了したクラスで最新の状態に保たれていますか、それとも今このコメントを削除する必要がありますか?

@ MisinformedDNA - https: //github.com/dotnet/corefx/issues/17905#issuecomment-365349091を使用してください

ILMergeとデッドコード分析を実行する方法、またはCSVを後処理する方法がわかりません。 でも、皆さんが私を指導するのに時間を費やしたいのであれば、私は学び/協力したいと思っています:)

私も知らないので、考えたり実験したりする必要があります。 現在、2.1リリースの終了に完全に取り組んでいるため、少し待つ必要があります😺

すべてのCSVを読み込むスクリプトを作成し、最も実用的なCSVに絞り込みました。 私は3,942の問題/機会を思いついた。

私は今、それぞれの問題を見て、適切な行動を取るつもりです。 https://github.com/MisinformedDNA/corefx/tree/clean-dead-codeで、私の進捗状況をフォローし、フィードバックを残すことができます。

いいですね、この@MisinformedDNAを見るのを楽しみにしています。

デッドコード分析に問題があり、ツールに問題または欠陥があることがわかりました。

レポートには、次のものを削除できると記載されています。

    Friend Enum vbErrors
        ObjNotSet = 91
        IllegalFor = 92
    End Enum

ただし、これらの列挙型は他の場所で参照されているため、考えられる1つのブランチを見てみましょう。

    ' Enum cannot be accessed, so Function cannot be hit
    ' But the dead code analysis did not show this as removable!!
    Friend Shared Function VbMakeIllegalForException() As System.Exception
        Return VbMakeExceptionEx(vbErrors.IllegalFor, GetResourceString(SR.ID92)) 
    End Function

    ' The chain continues:

    ' VbMakeIllegalForException() cannot be hit, so first "If" cannot be true, but the rest of the Function *could* still be hit
    Public Shared Function ForNextCheckObj(ByVal counter As Object, ByVal loopObj As Object, ByRef counterResult As Object) As Boolean
        Dim loopFor As ForLoopControl
        If loopObj Is Nothing Then
            Throw VbMakeIllegalForException()
        End If
        If counter Is Nothing Then
            Throw New NullReferenceException(GetResourceString(SR.Argument_InvalidNullValue1, "Counter"))
        End If
        loopFor = CType(loopObj, ForLoopControl)
        ... cut for brevity
    End Function

ロジックは、最初の「If」ステートメントが決して真ではない場所に私を連れて行ってくれました。 ただし、その「If」ステートメントはnullチェックであるため、誰かがnullを渡すと想定し、デッドコードを判別するためのケースが欠落していると想定する必要があります。 また、デッドコードの判別に問題(またはそれ以上)がある場合、1つ以上の列挙型がデッドコードではない可能性があります。

tldr:まとめ

質問1:VbMakeIllegalForExceptionが削除対象としてマークされていない列挙型を呼び出すことができなかったのに、なぜ削除対象としてマークされていないのですか。
質問2:デッドコードを決定する際のテストケースが、該当するすべてのパラメーターにnull値を渡さないのはなぜですか?

@ericstj

列挙型の値はおそらくmsilにインライン化されているため、ツールはそれらを認識しません。 同じことが定数にも当てはまります。 このような場合、ソースコードに対して何もするべきではありません。

System.Data.Commonのデッドコードの削除が完了し、 build.cmd src\System.Data.Commonが正常に完了しました。 今までは、自分がいるライブラリで作業するだけでよいという印象を受けていました。ビルドとテストに合格すれば、問題はありませんでした。 しかし、とにかくフルビルドを実行することにしました。多くのエラーが発生したため、実行してよかったです。

エラーの例を次に示します。

SystemDataSqlClientSqlCommandBuilder.cs(277,17):エラーCS0117:「ADP」に「RemoveStringQuotes」の定義が含まれていません[D:ReposcorefxsrcSystem.Data.SqlClientsrcSystem.Data.SqlClient.csproj]
SystemDataProviderBaseDbConnectionPool.cs(984,33):エラーCS0117:「ADP」に「SetCurrentTransaction」の定義が含まれていません[D:ReposcorefxsrcSystem.Data.SqlClientsrcSystem.Data.SqlClient.csproj]
D:ReposcorefxsrcCommonsrcSystemDataProviderBaseDbMetaDataFactory.cs(409,21):エラーCS0117:「ADP」に「IsEmptyArray」の定義が含まれていません[D:ReposcorefxsrcSystem.Data.SqlClientsrcSystem.Data.SqlClient.csproj]
SystemDataCommonDbConnectionStringCommon.cs(180,27):エラーCS0117:「ADP」に「InvalidConnectionOptionValue」の定義が含まれていません[D:ReposcorefxsrcSystem.Data.SqlClientsrcSystem.Data.SqlClient.csproj]

欠落しているメンバーはすべて、 System.Data.Common.diff.htmlで削除するように明確に指定されていますが、子クラスでエラーが発生するだけでなく、これらの子クラスのdiffファイルや、 System.Data.SqlClientなどの関連するアセンブリがありません。

上記の最初のエラーは、パブリックメソッドSqlCommandBuilder.UnquoteIdentifierにリンクされています。 したがって、他のクラスに重大な変更を加えることなく、 ADP.RemoveStringQuotesSystem.Data.Commonから削除する方法がわかりません。

これらをどのように処理する必要がありますか? 削除のマークが付けられている理由はありますか?

@anipikはここで@misinformeddnaを助けることができますか?

@MisinformedDNA 1つのライブラリが他のライブラリに直接(AがBのタイプを使用)または間接的に依存している可能性があるため、常にリポジトリ全体を構築してすべてのライブラリのテストを実行する必要があります。 (AはBのあるタイプを使用し、Cのあるタイプを使用します)
関数ADP.removeStringQuotesisemptyarraysetTransactionには、ApaterUtilまたはSystem.Data.Commonに固有のものは何もないので、 sqlCommandBuilder.csに移動できます。プライベート静的メソッドとしての

上記のすべてのメソッドはinternal static methodsであり、定義されているアセンブリでは使用されなくなりました。
内部メンバーは通常、それらが定義されているアセンブリの外部で使用されることを意図していません。 ただし、場合によっては、「InternalsVisibleTo」属性を使用してこれを行います。

@danmosemsftは、これらの内部関数を、最適に使用されるアセンブリに移動していますか?

これが私が取り組んでいるフォークです: https ://github.com/MisinformedDNA/corefx/tree/clean-dead-code

前に述べたように、デッドコード分析では、 System.Data.CommonADP.RemoveStringQuotesを削除できるとされています。 ただし、 ADPinternalとマークされているため、アナライザーはそれがアセンブリの外部で使用されていないと想定した可能性があります。 InternalsVisibleTo属性を検索するかどうかはわかりませんが、ここでは使用されていないため、検索しても問題ありません。 代わりに、リンクされたファイルを介して共有されています。

<Compile Include="$(CommonPath)\System\Data\Common\AdapterUtil.cs">
    <Link>System\Data\Common\AdapterUtil.cs</Link>
</Compile>

アナライザーは、異なるADPクラスを、本質的に複製されているため、共有タイプではなく、個別のタイプとして認識していると思います。 したがって、 RemoveStringQuotesを削除することは、 System.Data.Commonに対して行うべき正しいことですが、リンクされている他のプロジェクトを検討するときに行うことは正しくありません。

アナライザーがこれらすべてのクラスが同じファイルからのものであると判断できない限り、これらのファイルの一部にデッドコードがあると永続的に考えます。

誰かがより良い提案をしない限り、私はこれらのメソッドをコードに追加し始めます。

@MisinformedDNA私はこれについて@danmosemsftofflineと話しました。 別の可能なアプローチは、ADPクラスを部分的にすることです。 そして、この関数をこれらのライブラリに移動できます。

最初のPRを提出しましたが、2つのビルドが失敗しました。 両方のビルドの失敗はタイムアウトを示しているようです。 これを解決するにはどのようなアクションを取る必要がありますか?

https://github.com/dotnet/corefx/pull/28795を参照してください

System.Private.Uriを見ていきます

これは、すべてのファイルをダウンロードし、それらを組み合わせて、誤検知の可能性が高いすべてのファイルを除外するために作成したアプリです。 うまくいけば、それは他の人に役立つでしょう。

@ericstjデータを再生成して、これを使用している場所をより明確に把握できるようにすることは理にかなっていますか?

次の名前空間で開始しました。

  • System.Collections.Specialized

    • CompatibleComparerのプロパティは2つだけですが、ファイルはsrc / commonにあり、使用範囲が広くなっています。

  • System.Diagnostics.DiagnosticSource
  • System.Diagnostics.FileVersionInfo
  • System.Diagnostics.Process
  • System.Diagnostics.StackTrace
  • System.Diagnostics.TextWriterTraceListener
  • System.Diagnostics.Tools
  • System.Diagnostics.TraceSource
  • System.Diagnostics.Tracing

データを再生成しました。 これは新しいリストです。人々が関連性があると思った場合に備えて、そこにあったものを上書きしたくありませんでした。

  • [] [Microsoft.CSharp](http://tempcoverage.blob.core.windows.net/report4/Microsoft.CSharp.diff.html)( csv
  • [] [Microsoft.VisualBasic](http://tempcoverage.blob.core.windows.net/report4/Microsoft.VisualBasic.diff.html)( csv
  • [] [Microsoft.Win32.Primitives](http://tempcoverage.blob.core.windows.net/report4/Microsoft.Win32.Primitives.diff.html)( csv
  • [] [Microsoft.Win32.Registry](http://tempcoverage.blob.core.windows.net/report4/Microsoft.Win32.Registry.diff.html)( csv
  • [] [System.Collections.Concurrent](http://tempcoverage.blob.core.windows.net/report4/System.Collections.Concurrent.diff.html)( csv
  • [] [System.Collections](http://tempcoverage.blob.core.windows.net/report4/System.Collections.diff.html)( csv
  • [] [System.Collections.Immutable](http://tempcoverage.blob.core.windows.net/report4/System.Collections.Immutable.diff.html)( csv
  • [] [System.Collections.NonGeneric](http://tempcoverage.blob.core.windows.net/report4/System.Collections.NonGeneric.diff.html)( csv
  • [] [System.Collections.Specialized](http://tempcoverage.blob.core.windows.net/report4/System.Collections.Specialized.diff.html)( csv
  • [] [System.ComponentModel.Annotations](http://tempcoverage.blob.core.windows.net/report4/System.ComponentModel.Annotations.diff.html)( csv
  • [] [System.ComponentModel](http://tempcoverage.blob.core.windows.net/report4/System.ComponentModel.diff.html)( csv
  • [] [System.ComponentModel.EventBasedAsync](http://tempcoverage.blob.core.windows.net/report4/System.ComponentModel.EventBasedAsync.diff.html)( csv
  • [] [System.ComponentModel.Primitives](http://tempcoverage.blob.core.windows.net/report4/System.ComponentModel.Primitives.diff.html)( csv
  • [] [System.ComponentModel.TypeConverter](http://tempcoverage.blob.core.windows.net/report4/System.ComponentModel.TypeConverter.diff.html)( csv
  • [] [System.Console](http://tempcoverage.blob.core.windows.net/report4/System.Console.diff.html)( csv
  • [] [System.Data.Common](http://tempcoverage.blob.core.windows.net/report4/System.Data.Common.diff.html)( csv
  • [] [System.Diagnostics.DiagnosticSource](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.DiagnosticSource.diff.html)( csv
  • [] [System.Diagnostics.FileVersionInfo](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.FileVersionInfo.diff.html)( csv
  • [] [System.Diagnostics.Process](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.Process.diff.html)( csv
  • [] [System.Diagnostics.StackTrace](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.StackTrace.diff.html)( csv
  • [] [System.Diagnostics.TextWriterTraceListener](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.TextWriterTraceListener.diff.html)( csv
  • [] [System.Diagnostics.Tools](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.Tools.diff.html)( csv
  • [] [System.Diagnostics.TraceSource](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.TraceSource.diff.html)( csv
  • [] [System.Diagnostics.Tracing](http://tempcoverage.blob.core.windows.net/report4/System.Diagnostics.Tracing.diff.html)( csv
  • [] [System.Drawing.Primitives](http://tempcoverage.blob.core.windows.net/report4/System.Drawing.Primitives.diff.html)( csv
  • [x] [System.IO.Compression.Brotli](http://tempcoverage.blob.core.windows.net/report4/System.IO.Compression.Brotli.diff.html)( csv
  • [] [System.IO.Compression](http://tempcoverage.blob.core.windows.net/report4/System.IO.Compression.diff.html)( csv
  • [] [System.IO.Compression.ZipFile](http://tempcoverage.blob.core.windows.net/report4/System.IO.Compression.ZipFile.diff.html)( csv
  • [] [System.IO.FileSystem.AccessControl](http://tempcoverage.blob.core.windows.net/report4/System.IO.FileSystem.AccessControl.diff.html)( csv
  • [] [System.IO.FileSystem](http://tempcoverage.blob.core.windows.net/report4/System.IO.FileSystem.diff.html)( csv
  • [x] [System.IO.FileSystem.DriveInfo](http://tempcoverage.blob.core.windows.net/report4/System.IO.FileSystem.DriveInfo.diff.html)( csv
  • [] [System.IO.FileSystem.Watcher](http://tempcoverage.blob.core.windows.net/report4/System.IO.FileSystem.Watcher.diff.html)( csv
  • [] [System.IO.IsolatedStorage](http://tempcoverage.blob.core.windows.net/report4/System.IO.IsolatedStorage.diff.html)( csv
  • [] [System.IO.MemoryMappedFiles](http://tempcoverage.blob.core.windows.net/report4/System.IO.MemoryMappedFiles.diff.html)( csv
  • [x] [System.IO.Pipes](http://tempcoverage.blob.core.windows.net/report4/System.IO.Pipes.diff.html)( csv
  • [] [System.Linq](http://tempcoverage.blob.core.windows.net/report4/System.Linq.diff.html)( csv
  • [] [System.Linq.Expressions](http://tempcoverage.blob.core.windows.net/report4/System.Linq.Expressions.diff.html)( csv
  • [] [System.Linq.Parallel](http://tempcoverage.blob.core.windows.net/report4/System.Linq.Parallel.diff.html)( csv
  • [] [System.Linq.Queryable](http://tempcoverage.blob.core.windows.net/report4/System.Linq.Queryable.diff.html)( csv
  • [] [System.Memory](http://tempcoverage.blob.core.windows.net/report4/System.Memory.diff.html)( csv
  • [] [System.Net.Http](http://tempcoverage.blob.core.windows.net/report4/System.Net.Http.diff.html)( csv
  • [] [System.Net.HttpListener](http://tempcoverage.blob.core.windows.net/report4/System.Net.HttpListener.diff.html)( csv
  • [] [System.Net.Mail](http://tempcoverage.blob.core.windows.net/report4/System.Net.Mail.diff.html)( csv
  • [] [System.Net.NameResolution](http://tempcoverage.blob.core.windows.net/report4/System.Net.NameResolution.diff.html)( csv
  • [] [System.Net.NetworkInformation](http://tempcoverage.blob.core.windows.net/report4/System.Net.NetworkInformation.diff.html)( csv
  • [] [System.Net.Ping](http://tempcoverage.blob.core.windows.net/report4/System.Net.Ping.diff.html)( csv
  • [] [System.Net.Primitives](http://tempcoverage.blob.core.windows.net/report4/System.Net.Primitives.diff.html)( csv
  • [] [System.Net.Requests](http://tempcoverage.blob.core.windows.net/report4/System.Net.Requests.diff.html)( csv
  • [] [System.Net.Security](http://tempcoverage.blob.core.windows.net/report4/System.Net.Security.diff.html)( csv
  • [] [System.Net.ServicePoint](http://tempcoverage.blob.core.windows.net/report4/System.Net.ServicePoint.diff.html)( csv
  • [] [System.Net.Sockets](http://tempcoverage.blob.core.windows.net/report4/System.Net.Sockets.diff.html)( csv
  • [] [System.Net.WebClient](http://tempcoverage.blob.core.windows.net/report4/System.Net.WebClient.diff.html)( csv
  • [] [System.Net.WebHeaderCollection](http://tempcoverage.blob.core.windows.net/report4/System.Net.WebHeaderCollection.diff.html)( csv
  • [] [System.Net.WebProxy](http://tempcoverage.blob.core.windows.net/report4/System.Net.WebProxy.diff.html)( csv
  • [] [System.Net.WebSockets.Client](http://tempcoverage.blob.core.windows.net/report4/System.Net.WebSockets.Client.diff.html)( csv
  • [] [System.Net.WebSockets](http://tempcoverage.blob.core.windows.net/report4/System.Net.WebSockets.diff.html)( csv
  • [] [System.Numerics.Vectors](http://tempcoverage.blob.core.windows.net/report4/System.Numerics.Vectors.diff.html)( csv
  • [] [System.ObjectModel](http://tempcoverage.blob.core.windows.net/report4/System.ObjectModel.diff.html)( csv
  • [] [System.Private.DataContractSerialization](http://tempcoverage.blob.core.windows.net/report4/System.Private.DataContractSerialization.diff.html)( csv
  • [] [System.Private.Uri](http://tempcoverage.blob.core.windows.net/report4/System.Private.Uri.diff.html)( csv
  • [] [System.Private.Xml](http://tempcoverage.blob.core.windows.net/report4/System.Private.Xml.diff.html)( csv
  • [] [System.Private.Xml.Linq](http://tempcoverage.blob.core.windows.net/report4/System.Private.Xml.Linq.diff.html)( csv
  • [] [System.Reflection.DispatchProxy](http://tempcoverage.blob.core.windows.net/report4/System.Reflection.DispatchProxy.diff.html)( csv
  • [] [System.Reflection.Metadata](http://tempcoverage.blob.core.windows.net/report4/System.Reflection.Metadata.diff.html)( csv
  • [] [System.Reflection.TypeExtensions](http://tempcoverage.blob.core.windows.net/report4/System.Reflection.TypeExtensions.diff.html)( csv
  • [] [System.Resources.Writer](http://tempcoverage.blob.core.windows.net/report4/System.Resources.Writer.diff.html)( csv
  • [] [System.Runtime.CompilerServices.VisualC](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.CompilerServices.VisualC.diff.html)( csv
  • [] [System.Runtime](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.diff.html)( csv
  • [] [System.Runtime.Extensions](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.Extensions.diff.html)( csv
  • [] [System.Runtime.InteropServices](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.InteropServices.diff.html)( csv
  • [] [System.Runtime.InteropServices.RuntimeInformation](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.InteropServices.RuntimeInformation.diff.html)( csv
  • [] [System.Runtime.InteropServices.WindowsRuntime](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.InteropServices.WindowsRuntime.diff.html)( csv
  • [] [System.Runtime.Numerics](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.Numerics.diff.html)( csv
  • [] [System.Runtime.Serialization.Formatters](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.Serialization.Formatters.diff.html)( csv
  • [] [System.Runtime.Serialization.Primitives](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.Serialization.Primitives.diff.html)( csv
  • [] [System.Runtime.WindowsRuntime.UI.Xaml](http://tempcoverage.blob.core.windows.net/report4/System.Runtime.WindowsRuntime.UI.Xaml.diff.html)( csv
  • [] [System.Security.AccessControl](http://tempcoverage.blob.core.windows.net/report4/System.Security.AccessControl.diff.html)( csv
  • [] [System.Security.Claims](http://tempcoverage.blob.core.windows.net/report4/System.Security.Claims.diff.html)( csv
  • [] [System.Security.Cryptography.Algorithms](http://tempcoverage.blob.core.windows.net/report4/System.Security.Cryptography.Algorithms.diff.html)( csv
  • [] [System.Security.Cryptography.Cng](http://tempcoverage.blob.core.windows.net/report4/System.Security.Cryptography.Cng.diff.html)( csv
  • [] [System.Security.Cryptography.Csp](http://tempcoverage.blob.core.windows.net/report4/System.Security.Cryptography.Csp.diff.html)( csv
  • [] [System.Security.Cryptography.Encoding](http://tempcoverage.blob.core.windows.net/report4/System.Security.Cryptography.Encoding.diff.html)( csv
  • [] [System.Security.Cryptography.OpenSsl](http://tempcoverage.blob.core.windows.net/report4/System.Security.Cryptography.OpenSsl.diff.html)( csv
  • [] [System.Security.Cryptography.Primitives](http://tempcoverage.blob.core.windows.net/report4/System.Security.Cryptography.Primitives.diff.html)( csv
  • [] [System.Security.Cryptography.X509Certificates](http://tempcoverage.blob.core.windows.net/report4/System.Security.Cryptography.X509Certificates.diff.html)( csv
  • [] [System.Security.Principal](http://tempcoverage.blob.core.windows.net/report4/System.Security.Principal.diff.html)( csv
  • [] [System.Security.Principal.Windows](http://tempcoverage.blob.core.windows.net/report4/System.Security.Principal.Windows.diff.html)( csv
  • [] [System.Text.RegularExpressions](http://tempcoverage.blob.core.windows.net/report4/System.Text.RegularExpressions.diff.html)( csv
  • [] [System.Threading](http://tempcoverage.blob.core.windows.net/report4/System.Threading.diff.html)( csv
  • [] [System.Threading.Overlapped](http://tempcoverage.blob.core.windows.net/report4/System.Threading.Overlapped.diff.html)( csv
  • [] [System.Threading.Tasks.Dataflow](http://tempcoverage.blob.core.windows.net/report4/System.Threading.Tasks.Dataflow.diff.html)( csv
  • [] [System.Threading.Tasks.Parallel](http://tempcoverage.blob.core.windows.net/report4/System.Threading.Tasks.Parallel.diff.html)( csv
  • [] [System.Threading.Thread](http://tempcoverage.blob.core.windows.net/report4/System.Threading.Thread.diff.html)( csv
  • [] [System.Transactions.Local](http://tempcoverage.blob.core.windows.net/report4/System.Transactions.Local.diff.html)( csv
  • [] [System.Web.HttpUtility](http://tempcoverage.blob.core.windows.net/report4/System.Web.HttpUtility.diff.html)( csv
  • [] [System.Xml.XPath.XDocument](http://tempcoverage.blob.core.windows.net/report4/System.Xml.XPath.XDocument.diff.html)( csv

エリック、ありがとう!

以下を確認しました。

  • System.IO.Compression.Brotli
  • System.IO.Compression.ZipFile
  • System.IO.FileSystem.DriveInfo
  • System.IO.IsolatedStorage
  • System.IO.MemoryMappedFiles
  • System.IO.Pipes
  • System.Memory

デッドコードのクリーンアップ:
System.Diagnostics.DiagnosticSource
System.Diagnostics.FileVersionInfo
System.Diagnostics.Process
System.Diagnostics.StackTrace
System.Diagnostics.TextWriterTraceListener
System.Diagnostics.Tools
System.Diagnostics.TraceSource
System.Diagnostics.Tracing
System.Drawing.Primitives

dotnet / corefx#33095

最初の貢献として、System.IO.Compressionのクリーニングを引き受けたいと思います。

開始投稿System.Consoleが完了としてマークされていますが、再生成されたデータではマークされていません。 クリアする必要があるのはSRの文字列だけであることがわかりました。
それで、 @ ericstj 、それは一種の間違いですか、それとも他のライブラリを調べてそのような小さなデッドコードを修正することができますか?

概要

このデータから役に立たないものを削除する小さなツールを作成しました。


それは削除します:

  1. 赤でマークされているすべての定数。

これは非常に一般的なものです。 「const」が付いているものはすべて無視してください。 これらはすべてコンパイラによってインライン化されたフィールドであり、ソースに保持したいと考えています。 通常、intとstrings。

  1. 赤でマークされていないすべてのもの(そのコードは死んでいない)。

それが残っています:

  1. デッドコードを含むネストレベルのクラスまたは構造体。 そのコードをより速く見つけるのに役立ちます。
  2. 削除できるすべてのSRの文字列。 ただし、 SRのメソッドも削除されないことに注意してください。

「クラスSR」の「静的文字列」はすべて特別です。 C#ファイルを編集する代わりに、.resxファイルで一致するエントリを見つけて削除する必要があります。 ライブラリの.resxファイルはsrcにありますsrcResourcesstrings.resx。 これを行うと、ビルドによってSRが再生成されます。 「クラスSR」の他のものは無視してください。デッドとして表示される可能性のあるメソッドがいくつかあります。

  1. パラメータのないコンストラクタが1つしかないクラス。 それは彼らと何もしないことを避けるのに役立ちます。

プライベートパラメーターレスコンストラクターは無視してください。 誤ってクラスをインスタンス化するのを防ぐために、これらをコードに含めています。コード内に保持したいと考えています。

他にコンストラクターがない場合は、パブリックパラメーターなしのコンストラクターを無視します。 これらは本物ではありません。


また:

クリアされたファイルはここにあります。 データを更新した後、私に言及してください。それを更新します。

@ericstj internal enumを削除しても安全ですか?

そのツールを使用した後、すべてのアセンブリをチェックしました。 それらのいくつかにはデッドコードがありません。
更新されたリストは次のようになります。 ツールのリポジトリからクリアされたファイルのhtmlpreviewへのリンクを変更します。 誰も気にしないことを願っています。

それで、 @ ericstj 、それは一種の間違いですか、それとも他のライブラリを調べてそのような小さなデッドコードを修正することができますか?

差分を再生成するとき、私はすべてを再びクリアして始めました。 デッドコード差分を実行するためのメカニズムは手動すぎます。 アセンブリデフに内部ツールを使用しています。

@ericstj内部列挙型を削除するのは安全ですか?

それは、その内部列挙型で何が行われるかによって異なります。 コンパイラーがソース参照を整数リテラルに変換するため、列挙型はバイナリーでデッドとして表示されることがよくあります。 ソースがまだそれを必要としていることに気付くでしょう。

このデッドコードスクラビングをより安定した状態でより良いエクスペリエンスにする方法についてのいくつかの考え。

  1. オープンに差分ツールを追加します。 内部のAsmDiffを使用しています。 それをオープンソースにするか、既存のライブラリ(SRM、CCI、またはCecil)の上に新しいものを作成することができます。
  2. プロジェクトがこのデッドコードのない検証にオプトインできるようにし、ツールが見逃していることを抑制します。
  3. ヒューリスティックを異なるルールやフィルタリングルールに入れて、2を繰り返します。
  4. ツールに十分な機能ができたら、リポジトリ全体でそれを有効にし、デッドコードを許可するベースラインをコミットし、この問題に再び戻る必要はありません😄

今日、ツリーを揺るがすデッドコードに使用するメカニズムは、バイナリで動作するリンカーです。 したがって、それをソースにマップするために、出力を入力と比較し、IDを出力します。 過去にリンカーの人々と話し合ったもう1つのことは、開発者が関心を持っていることに直接マップできる、より多くのログを出力することです。 また、PDBでも動作するため、技術的にはすべてのソースコードと行情報が含まれています。

@ericstjはcorelibで実行することは技術的に可能ですか? corelibにデッドメソッドがあることに気づきましたが、間違いなくもっとあります。 確かに、VMからのすべてのコールバックを考えると注意が必要です

@danmosemsftcoreclrビルドの一部としてSystem.Private.Corelib.dllですでに実行されています。 削除されていないことに気付いたデッドメソッドは何ですか?

@ericstjこれを閉じることができると思いますか?

これは今のところ行われていると思います。 コードベースの改善に貢献してくれたすべての人に感謝します!

このページは役に立ちましたか?
0 / 5 - 0 評価