Runtime: تنظيف التعليمات البرمجية الميتة

تم إنشاؤها على ٥ أبريل ٢٠١٧  ·  152تعليقات  ·  مصدر: dotnet/runtime

بعد تمكين الرابط الأحادي لثنائيات .NETCoreApp الخاصة بنا ، فقد حدد عددًا من الأماكن التي يوجد بها رمز ميت.

تقع هذه في 3 فئات.

  1. رمز ميت حقًا ولا يتم استخدامه في أي مكان في التجميع.

    • يمكن حذف هذا

  2. ملفات المصدر التي يتم استخدامها في بناء واحد من التجميع ، ولكن ليس كلها. ملفات المصدر الشائعة حيث يستخدم بعض المشروع المصدر ، ولكن ليس الكل.

    • يمكن تحليلها بشكل أفضل وتقسيمها لتوفير مصدر ضئيل عند الحاجة. أو قد تحتوي على رمز ميت حقًا.

  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 ) - العلاقات العامة dotnet / corefx # 19140 بواسطةYoupHulsebos
  • [x] [System.Collections.Immutable] (http://tempcoverage.blob.core.windows.net/report2/System.Collections.Immutable.diff.html) ( csv ) - لا شيء يمكن إزالته بواسطة YoupHulsebos في https: //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 ) - لا شيء يمكن إزالته بواسطة YoupHulsebos في https: //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 / issue / 17905 # issuecomment-294286344 بواسطة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 / قضايا / 17905 # issuecomment-294286344 بواسطة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 بواسطة @ ارميار
  • [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 بواسطة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 بواسطة 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 / ccerozenfeld) وتنويع المخرجات.

الاختلافات من بناء 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. هذه الأداة ليست متاحة بعد لـ core ، راجع (https://github.com/dotnet/buildtools/issues/1420). إذا كان لديك إصدار سطح المكتب من الأداة ، يمكنك تمكين إعداد التقارير عن طريق تعيين AsmDiffCmd=<pathToAsmDiff.exe>

يمكن تمكين الرابط لأي مشروع (ليس فقط تلك الموجودة في NETCore.App) من خلال البناء باستخدام ILLinkTrimAssembly=true بعد دمج https://github.com/dotnet/corefx/pull/17825.

كيف تتعامل مع مكتبة

اختر مكتبة وقم بتدوين ملاحظة ستعمل عليها.

افتح تقرير html أعلاه للمكتبة. ابحث عن الخطوط باللون الأحمر. هؤلاء ماتوا نظريا. ابحث عن الكود في المجلد src لهذا الريبو واحذفه. تابع من خلال التقرير الخاص بالمكتبة وحذف جميع الأكواد الميتة من هذا القبيل.

لكن هناك بعض الحالات الخاصة:

  1. هذا هو واحد شائع جدا. أي شيء يحتوي على "const" ، من فضلك تجاهلها. هذه كلها حقول قام المترجم بتضمينها ، ونريد الاحتفاظ بها في المصادر. عادة ints والسلاسل.
  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'"

بعد إزالة الرمز الميت من مكتبة ، تأكد من إنشائه (قم بتشغيل "msbuild" في مجلد "src" للمكتبة). إذا لم يحدث ذلك ، فارجع للخلف. إذا كان الأمر كذلك ، فتحقق من إنشاء الاختبارات واجتيازها (قم بتشغيل "msbuild / t: buildandtest" في مجلد "الاختبارات"). مرة أخرى إذا لم يفعلوا ذلك ، فتتبع خطواتك.

إذا كان كل هذا يبدو جيدًا ، فيمكنك تقديم عرض عام للمكتبة. عندما تدخل العلاقات العامة ، يمكننا التحقق من ذلك هنا.

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 / وقت التشغيل # 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 ، واذهب وحذف المصادر المميزة باللون الأحمر.

الشيء الواضح الذي ينتقل إلى الخارج هو أن فئة SR التي تم إنشاؤها بها دائمًا العديد من الأعضاء غير المستخدمة ، وتظهر في جميع (أو على الأقل معظم) مجموعاتنا. يمكن أن يمنحنا ذلك بعض التحسينات العالمية السهلة إذا توصلنا إلى كيفية إصلاح ذلك.

أرى أيضًا أن حقول private const تظهر في بعض الحالات. يتم استخدامها من خلال تطبيق هذا الفصل ، ولكن من الواضح أنها غير مرئية أو مستخدمة في الخارج. ربما لا يستحق محاولة "إصلاح" تلك المشاكل.

إذا كان تطبيق الفئة الذي يستخدم الحقول private const يمكن الوصول إليه عبر نقطة إدخال مرئية خارج التجميع ، فلن تتم إزالة الحقول.

من المفترض أنه إذا كانت أي مكتبة بها عناصر داخلية مرئية (على سبيل المثال لاختبارات الوحدة) ، فسنرى إيجابيات خاطئة ، أليس كذلك؟

إذا كان التجميع يحتوي على InternalsVisibleTo ، فسيتم اعتبار جميع الأجزاء الداخلية جذورًا أيضًا.

موافق. أعتقد أن هناك بعض الحالات التي تستخدم فيها الاختبارات التفكير للحصول على العناصر الداخلية. ولكن سيتم اكتشافها بسرعة عندما نجري الاختبارات.

تضمين التغريدة

الشيء الواضح الذي يقفز هو أن فئة SR التي تم إنشاؤها دائمًا ما تحتوي على العديد من الأعضاء غير المستخدمة ، وتظهر في جميع (أو على الأقل معظم) جمعياتنا. يمكن أن يمنحنا ذلك بعض التحسينات العالمية السهلة إذا توصلنا إلى كيفية إصلاح ذلك.

لقد قمت بالفعل بتمرير في فبراير لحذف 100 من السلاسل الميتة. سيكون هناك القليل جدا من اليسار. أعتقد أن هذه هي الحالات التي يتم فيها قطع الطريقة التي تشير إلى السلسلة نفسها. في هذه الحالة بالطبع يجب قطع 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);

في كثير من الأحيان (على الأقل من القشط المختصر 😄) ، يتم استخدام الأول فقط ، وأحيانًا الثاني. في بعض القطع التي نقرت عليها ، كان هذا هو أكبر جزء من الفرق.

موافق. أعتقد أن هناك بعض الحالات التي تستخدم فيها الاختبارات التفكير للحصول على العناصر الداخلية. ولكن سيتم اكتشافها بسرعة عندما نجري الاختبارات.

لقد غطيت بالفعل معظم هؤلاء: https://github.com/dotnet/corefx/pull/17825/commits/2277db969616a5ad4fd9f4a8118a3b4030ff62d3

نحن بالفعل نظيفون من الداخل والخارج.

يقول تقرير Dataflow أن الأنواع الموجودة في مساحة الاسم System.Threading.Tasks.Dataflow.Internal.Threading ميتة. هذا ليس صحيحًا ، لقد ماتوا في التكوين الافتراضي ، لكن هناك تكوينات أخرى تستخدمهم. راجع https://github.com/dotnet/corefx/pull/17912 للتغيير المقترح.

هل من المحتمل أن هناك أنواع أخرى من هذا القبيل؟ هل هناك شيء يجب القيام به حيالهم؟

هذا التقرير مخصص فقط لـ NETCoreApp على Windows. من المحتمل أن يكون هناك تكوين آخر لا يزال يستخدمهم وسيتم اكتشاف ذلك بواسطة -allConfigurations build إذا حاول شخص ما إزالتها تمامًا. في مثل هذه الحالات ، يمكنك تحسين تكوين NETCoreApp عن طريق if-def'ing / تقسيم المصدر كما ذكرت في البند 2 أعلاه. يبدو هذا مثل ما تفعله في 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 انتهى

لقد ألقيت نظرة خاطفة على الفرق. هناك الكثير من الضوضاء فيها - كان من الصعب بالنسبة لي أن أجد أي شيء سهل وقابل للتنفيذ. هل يمكننا تصفية الضوضاء من الاختلافات (consts ، والمنشئات الخاصة بدون معلمات ، ...) بحيث تحتوي فقط على العناصر القابلة للتنفيذ السهلة؟

يمكنك فتح ملفات 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 وبعض الكودات الأخرى (لم يكتشف التحليل ، على سبيل المثال ، ExpressionBinder.BindPtrToArray ميت وفقًا لـ dotnet / corefx # 17948) والباقي موجود في بلدي المشاهد كجزء من إعادة بيع ديونتي المستمرة لذلك التجميع.

danmosemsft بخصوص EventAccessorInfo.InterfaceRaiseMethod: إنها تقول أن get_InterfaceRaiseMethod قد مات ولأنه لا يوجد set_InterfaceRaiseMethod ، فإن الخاصية ميتة. يعيّن الكود الموجود في المُنشئ حقل النسخ الذي تم إنشاؤه بواسطة المترجميحافظ k__BackingField و ILLink على المجال.

jimcarley هذا منطقي ، لقد تحققت من معاملات S. أعتقد أنه إذا كانت هناك احتمالات ونهايات ميتة بالفعل ، فقد ترغب في إزالتها في مرحلة ما.

JonHanna إذا كنت تعتقد أن ILLink كان يجب أن يكون قادرًا على اكتشاف أن الرمز قد مات ، فسأعلمerozenfeld .

@ danmosemsft سأكون منبهرًا للغاية إذا كان ذلك ممكنًا ، لقد قصدت فقط أن البتات المذكورة هنا هي بالفعل مجموعة فرعية من عمليات الإزالة التي أنوي إجراؤها ، لذلك سيتم تغطية هذا العنصر في القائمة.

danmosemsftJonHanna ILLink لا يحاول العثور على كود لا يمكن الوصول إليه ضمن الأساليب. إذا كانت الطريقة قابلة للوصول ، فإنها تفترض أن جميع التعليمات الموجودة في الطريقة قابلة للوصول.

لصالح الآخرين: ظهرت حالة أخرى في وضع عدم الاتصال ، حيث تم تعيين حقل 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.

huanwu ، تحتوي أداة SGEN على 400 كيلو بايت من التعليمات البرمجية الميتة.
هل كل هذا معقول إزالته أم أنه عمل قيد التقدم ، هل ستستخدم هذا الرمز؟

راجع 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. بصرف النظر عن الثوابت وما إلى ذلك ، لا يزال هناك بعض الميزات التي قد تصبح ذات صلة إذا تم نقل الميزات غير المدعومة حاليًا (بما في ذلك واحدة بها مشكلة تتطلب ذلك فقط) لذلك ربما يكون من الأفضل عدم القيام بالمزيد الآن.

يبدو جيدًا ، لقد تم تحديده في القائمة. معظم الباقي يحتاج فقط إلى الحد الأدنى من التنظيف. SGEN هو الاستثناء الرئيسي ( @ huanwu يرجى مراجعة السؤال أعلاه)

zhenlan سؤال أعلاه حول Microsoft.XmlSerializer.Generator.dll - يحتوي على 400 كيلو بايت من التعليمات البرمجية الميتة (!) ... هل هذا الرمز ميت مؤقتًا ، أو هل انتهيت من هذا العمل ويمكن لشخص ما حذفه؟ يمكنني أن أطلب من البائعين القيام بالكثير من العمل ، على الأرجح. فقط دعني اعرف.

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 كيلو بايت ، لذا فهو يستحق القيام به.

مرحبًا danmosemsft ، قد لا أفهم تمامًا كيف يتم تحديد الشفرة الميتة ، لكن شيئًا ما قد توقف.

على سبيل المثال ، ملف الفرق Microsoft.XmlSerializer.Generator وضع علامة على ReflectionAwareCodeGen باللون الأحمر ، والذي فسرته على أنه رمز ميت من وجهة نظر الأدوات. ومع ذلك ، فمن الواضح أنه يستخدم في Microsoft.XmlSerializer.Generator هنا . هل يمكنك المساعدة في التوضيح؟

حسنًا ، أرى أن الأداة حددت بالفعل سلسلة * CodeGen بأكملها كرمز ميت. من فضلك تجاهل سؤالي السابق واسمحوا لي أن أشرح. تم تسجيل الوصول الأولي لمشروع Microsoft.XmlSerializer.Generator. بعض الرموز ميتة مؤقتًا فقط. سيتم استخدامها عندما ننجز المزيد من العمل. ربما يمكننا تشغيل الأداة مرة أخرى عندما نقترب من اكتمال التعليمات البرمجية؟

zhenlan هذا بالضبط ما افترضته. اكتمل الرمز الأسبوع الماضي في الواقع :) ربما هذا هو DCR. هل هناك الكثير لتفعله؟

@ danmosemsft نعم ما افترضته هو الصحيح :)

Microsoft.XmlSerializer.Generator (Sgen) هي أداة CLI لا يتم شحنها كجزء من .NET Core. بالنسبة للجزء من الكود الذي يشاركه Sgen مع S.Private.Xml ، لا أعتقد أن هناك أي فجوات كبيرة باستثناء إصلاحات الأخطاء ونحن نستهدف 5/10 لـ ZBB. بالنسبة للجزء من الكود الموجود تحت Sgen فقط ، هناك المزيد من الأعمال المميزة التي يجب القيام بها ولكن يجب أن يكون لدينا المزيد من الفسحة بسبب مركبات الإصدار المختلفة. نأمل أن يوضح هذا.

erozenfeld معظم الأكواد القابلة للحذف المتبقية هي على الأرجح أجزاء من الملفات المشتركة الشائعة التي لا يستخدمها أحد. بدون تحليل كل منها يدويًا أو القيام ببعض عمليات الانضمام المرهقة لملف CSV ، لا يمكن تنظيف هذا الرمز. هل هناك طريقة مباشرة لتشغيل ILLink على مجموعة كاملة من التجميعات ، ودمج الملفات المستخدمة في تجميعات متعددة ، حتى نتمكن من الحصول على أحد تقارير HTML التي تعرض ما هو ميت في التعليمات البرمجية الشائعة؟

نود أيضًا الدمج في تجميعات الاختبار حيث يتم تجميع بعض الاختبارات في كود المنتج (مثل PathInternal.cs). أيضا يونكس لأنهم بالطبع يستخدمون كود مشترك.

danmosemsft يمكن لأداتي القيام بذلك. على سبيل المثال ، قم بتشغيله على قاعدة التعليمات البرمجية بالكامل ، وحذف الأسطر تلقائيًا بما في ذلك الإيجابيات الخاطئة ، وقم بالبناء والعودة بشكل متكرر ثم الاختبار. أخيرًا ادفعه إلى حساب Github الخاص بي وأنشئ طلب سحب. ربما يتطلب الأمر قدرًا كبيرًا من العمل على الرغم من عدم محاولة محاولة ذلك ما لم يتم استخدامه. راجع https://github.com/dotnet/corefx/pull/18395 للحصول على نتائج حول مجموعة فرعية

تضمين التغريدة

هل هناك طريقة مباشرة لتشغيل ILLink على مجموعة كاملة من التجميعات ، ودمج الملفات المستخدمة في تجميعات متعددة ، حتى نتمكن من الحصول على أحد تقارير HTML التي تعرض ما هو ميت في التعليمات البرمجية الشائعة؟

لا ، ليس هناك طريقة مباشرة للقيام بذلك. يعمل ILLink على التجميعات ، وليس الملفات المصدر المستخدمة في إنشائها.

erozenfeld لا أعتقد أن هذا ما قصدته. لا أتوقع أن يعمل ILLink على المصادر. ولكن في الوقت الحالي ، لا يمكن حذف أي مصادر مشتركة تظهر على أنها ميتة في ثنائي X بسهولة لأنه يمكن استخدامها بواسطة ثنائي Y أو Z. مع إصلاح pdb بشكل مناسب ، يمكننا حذف أي كود شائع ظهر على أنه ميت. كان سؤالي هو ما إذا كان بإمكان ILMerge دمج التجميعات في واحدة ، ثم إجراء تحليل الإغلاق فوق ذلك.

danmosemsft لا ، لا يمكن لـ ILLink دمج التجميعات في مجموعة واحدة كما يفعل ILMerge. لا أعرف كيف يتعامل ILMerge مع الأسماء المتضاربة عبر التجميعات. إذا كان لديك فئة NC في التجميع A والفئة NC في التجميع B ، فإنك تحتاج بشكل عام إلى الاحتفاظ بكليهما (وإعادة تسمية أحدهما أو كليهما) عند الدمج ما لم تتمكن من إثبات أنهما متطابقان بمعنى عميق.

مسكتك. حسنًا ، ربما يظهر نهج في المستقبل. لا مشكلة.

ويحدث لي أيضًا أنه يمكن إجراؤه ببعض معالجة ملفات CSV ...

من المحتمل أن تكون كل هذه البيانات قديمة الآن. من المحتمل أن نعيد تشغيل التقارير إذا كنت تريد القيام بمزيد من العمل في هذا الشأن. يمكنك العثور على إرشادات حول القيام بذلك في قسم الخلفية أعلاه.

في System.Collections.Immutable و System.Collections.NonGeneric ، الرمز الوحيد الذي تم وضع علامة عليه هو إما الثوابت المستخدمة أو الطرق في الملفات الشائعة حيث يتم استخدام طرق أخرى من نفس الفئة في هذا المشروع ، لذلك لا تتطلب المزيد من العمل.

شكرًا YoupHulsebos ، تم تحديث المنشور العلوي.

في System.IO.FileSystem.Watcher و System.Security.Cryptography.Cryptography.Primitives ، الرمز الوحيد الذي تم وضع علامة عليه هو إما الثوابت المستخدمة أو الطرق في الملفات الشائعة حيث يتم استخدام طرق أخرى من نفس الفئة في هذا المشروع ، لذلك فهي لا تتطلب مزيدًا من العمل.

yaelkeemink شكرا مربعات الاختيار المحدثة.

مرحبا،
بصفتي مساهمًا لأول مرة ، أود التعامل مع مكتبة System.Net.Mail إذا كان ذلك جيدًا!

طبعا، شكرا! إنطلق. إذا واجهت أي حواجز طريق ، فأرسلها إلينا هنا بشأن مشكلات جديدة في الملف (وقم بوضع علامة علي للتوجيه).

لقد قمت بإنشاء طلب سحب لـ System.Net.Mail ووقعت على الاتفاقية.

شكراErmiar! تم تحديث العدد الأعلى برابط إلى العلاقات العامة.

لأول مرة هنا - سآخذ ما يلي:

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

🗄

رائع ، أهلا وسهلا بك على متنgarfbradaz!
أخبرنا عندما ترسل العلاقات العامة ، سنقوم بتحديث المنشور العلوي ( ViktorHofer ، هل يمكنك رجاء المساعدة اليوم؟)

بالتأكيد.

garfbradaz ، يرجى التأكد بعد إزالة الكود الميت المحتمل لإجراء جميع الاختبارات في كلا المشروعين لسطح المكتب و Core.
يمكنك القيام بذلك عن طريق التشغيل أولاً:
build.cmd و build.cmd -framework:netfx من جذر corefx وبعد ذلك تشغيل مشاريع الاختبار الفردية مثل هذا:
msbuild /t:RebuildAndTest و msbuild /t:RebuildAndTest /p:TargetGroup=netfx .

لا تتردد في الاتصال بي إذا كنت بحاجة إلى مساعدة. شكرا لمساعدتك!

شكرا ViktorHofer / Karelz - ببطء من خلال الحرث

كانت هناك نتيجة إيجابية خاطئة: تم تنفيذ dotnet / corefx # 19826 مع إزالة الكود عن طريق الالتزام 81506698 بشأن هذه المشكلة. على الرغم من أن الطريقة "ميتة" في الوقت الحالي ، فمن الضروري أن تكون هناك لإعادة DbProviderFactories من .NET بالكامل. لذلك سيتم إحيائه إذا تم دمج العلاقات العامة لـ dotnet / corefx # 19826.

كمساهم لأول مرة ، أود المشاركة في System.Linq.Expressions.

mccbraxton عظيم! إذا كنت بحاجة إلى أي مساعدة ، اتصل بي.

mccbraxton يبدو أنه تم تنظيف System.Linq.Expressions بالفعل. هل تريد أن تأخذ قطعة أخرى؟

ViktorHofer أنت على حق - لابد أنك قرأت خطأ. ماذا عن System.Security.Cryptography.Algorithms؟

تبدو جيدا! لقد أضفتك في الجدول. يرجى التأكد من عدم حذف الرمز الذي يستخدمه أي هدف. شكرا لمساعدتك!

اهتمت dotnet / corefx # 18162 بما تبقى في تقرير Microsoft.CSharp الذي كان ميتًا حقًا.

مرحبًا المساهم الجديد هنا ، يمكنني الحصول على System.ComponentModel. *

شكرا norek اذهب لذلك.

مرحبًا أدناه ملخص System.ComponentModel.

  • الجذر - لا شيء للإزالة
  • شروح - لا شيء لإزالة
  • .EventBasedAsync - لا شيء للإزالة
  • الأوائل - تم وضع علامة عليهم كميت ولكن ليس كذلك
  • . 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>

ericstjerozenfeld هل يمكننا إصلاح ملف CSV الذي يرسله ILLink حتى لا يظهر الرمز ميتًا عندما أجبرناه على الاحتفاظ بالشفرة؟

إن ملفات CSV التي لدينا هي مجرد فرق بعد التشذيب ، لذلك ليس لديهم أشياء متجذرة بشكل صريح. البيانات المرتبطة بهذه المشكلة ليست مباشرة. إنه من تشغيل لمرة واحدة عندما فتحت المشكلة. أظن أنك إذا نظرت إلى المعلومات الحية فلن تظهر على أنها فرق.

مرحبًا ، أنا مساهم لأول مرة. أرغب في تجربة System.Net.Http و System.Net.HttpListener.

تضمين التغريدة

AlexGhiondea كما ذكر

مرحبا. هل يمكنني أخذ Microsoft.VisulaBasic ؟

satano بالتأكيد ، تفضل. يبدو أنه لا يوجد سوى عدد قليل من البتات التي يجب إزالتها (كل الحقول الثابتة والمُنشئ الذي لا يحتوي على معلمات تحتاج إلى البقاء بعد ذلك ، حسب كتابتي المكتوبة أعلاه). ربما يمكنك عمل CSharp أيضًا؟

هناك أيضًا بعض المكتبات الجديدة منذ إجراء التحليل أعلاه ...

حسنًا ، سأفعل CSharp و VisualBasic.

PR لـ Microsoft.VisualBasic جاهز.

بخصوص Microsoft.CSharp - تمت إزالة كل شيء باللون الأحمر في ملف الفرق. لذا فقط ضع علامة عليها في المشكلة.

هل سنترك هذه المشكلة لأول مرة ، أم يمكنني المتابعة؟

satano هل يمكنك العثور على التغيير الذي أزال الفروق الحمراء؟
لا بأس بالمتابعة ، فنحن لا نحفظه لأول مرة فقط.

لا أعرف ما إذا كان كل شيء ، ولكن تمت إزالة شيء ما هنا: https://github.com/dotnet/corefx/commit/3eb339702e2fcdf924b50c2e32d7e9e02395e52f

حتى أن JohnHanna قالها هنا https://github.com/dotnet/corefx/issues/17905#issuecomment -291924301

سأستمر من الأعلى. بعد ذلك سأحصل على System.IO.Compression و System.IO.FileSystem.AccessControl و System.IO.FileSystem .

satano ابحث عنها - لا داعي لطلب الإذن ، إذا كان شخص آخر يبحث ، فسيقومون بالنشر هنا.

إحدى "المشاكل الوصفية" المثيرة للاهتمام لشخص ما هي ما إذا كانت هناك طريقة لاستخدام نفس أداة الرابط للعثور على كود عام لا يستخدمه أي شخص. إذا تم استخدام فصل دراسي تم سحبه من srccommon جزئيًا بواسطة مكتبة ، فسيظهر ميتًا في هذا التحليل ، ولكن لا يمكن إزالته لأن مكتبة أخرى قد تقوم بسحبه واستخدامه. ما كنت أفكر فيه هو ما إذا كانت هناك طريقة لدمج التجميعات ، ثم قم بتشغيل الرابط عليها. erozenfeld هل يمكننا استخدام الرابط للدمج ، ثم العثور على رمز ميت في النتيجة؟

لا يمكن لـ ILLink حاليًا دمج التجميعات. هذا شيء نفكر في إضافته في المستقبل. هناك أدوات أخرى يمكنها القيام بذلك: https://github.com/Microsoft/ILMerge و https://github.com/gluck/il-repack على الرغم من أنني لست متأكدًا مما إذا كانوا يتعاملون مع هذا السيناريو بالطريقة التي نريدها. قد يدركون أو لا يدركون أن الأنواع / الأساليب / الحقول ذات الأسماء المتضاربة تمثل كيانات متطابقة.

سأستمر في استخدام System.Net.Http و System.Net.HttpListener و System.Net.NetworkInformation .

سآخذ System.Net.* واحدًا تلو الآخر.

متابعة الباقي: System.Private.* ، System.Runtime.* و System.Security.* .

تضمين التغريدة

... هل يمكنك العثور على التغيير الذي أدى إلى إزالة الفروق الحمراء؟

دوت نت / كوريفكس # 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
  • 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.Security.AccessControl
  • النظام والأمن والمطالبات
  • النظام.الأمن.التشفير.الخوارزميات
  • النظام.الأمن.التشفير.التشفير
  • System.Security.Cryptography.OpenSsl

لذا فإن المشروع الوحيد المتبقي هو Microsoft.XmlSerializer.Generator . يحتوي على معظم الشفرات الميتة ، ولكن كما ذكر في بعض التعليقات هنا ، هناك عمل قيد التقدم هناك - كما فهمته.

هل انتهى هذا الموضوع؟ إذا لم أستطع الحصول على System.Console ؟

@ Iroca88 متأكد. لاحظ أن عمليات التفريغ المرتبطة أعلاه قد تكون قديمة بعض الشيء الآن.

شكرًا danmosemsft ، أي اقتراح للحصول على مقالب جديدة؟ وإلا سأبدأ بالمقالب المذكورة أعلاه.

راجع للشغل: is @ lroca88 ، لقد قمت بتكبير الحرف الأول (L) لتجنب هذا النوع من الارتباك :)

@ Lroca88 يشرح المنشور العلوي كيفية الوصول إلى التجميعات المشذبة والمحددة مسبقًا. للتفرقة بينها ، استخدمنا أداة لا تبدو عامة. يمكنك استخدام برنامج فك تشفير مثل Ilspy On كليهما وإجراء فرق نصي على النتائج. من المحتمل أن ينجح ذلك.

سأقوم بتشغيل مقارنة حديثة ومشاركتها. ابقوا متابعين.

ها هي الأحدث:

  • [] [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 تأكد من قراءة تلميحات المنشور العلوي حول كيفية القيام بهذا التمريرة ، مع حفظ بعض الالتباس ..

أووبس. فاتني اثنين من وحدات البت المعزولة حديثًا في Microsoft.CSharp في dotnet / corefx # 26491. سأفهم ذلك قريبًا.

من القائمة الجديدة ، System.Runtime و System.Web.HttpUtility و System.Linq و System.Linq.Queryable تحتوي فقط على ثوابت غير ميتة بالفعل وبعض التعليمات البرمجية المشتركة. يحتوي System.Linq.Expressions على تلك العناصر وعدد قليل من العناصر المستخدمة في طرق عرض تصحيح الأخطاء والموارد المستخدمة مع ثوابت مترجم معين ، وبالتالي يجب إزالتها ، بحيث يمكن تحديد هذه العناصر الخمسة جميعًا.

لقد دمجت المكتبات التي استعرضتها JonHanna وتلك التي راجعتها في قائمة. سأستمر في تحديث القائمة كما يسمح وقتي ، إذا أراد شخص ما إضافة عناصر إلى هذه القائمة ، فلا تتردد في الاتصال بي!

مكتبة | تمت المراجعة بواسطة | حالة
- | - | -
ملف Microsoft.CSharp (csv) | JonHanna | دوت نت / corefx # 27104
ملف Microsoft.VisualBasic (csv) | @ Lroca88 | لا شيء للإزالة
Microsoft.Win32.Primitives (csv) | @ Lroca88 | لا شيء للإزالة
Microsoft.Win32.Registry (csv) | @ Lroca88 | لا شيء للإزالة
System.Collections.Condurrent (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 قد ماتت (حيث قد تظهر ميتة في مجموعة واحدة دون أخرى). إذا كنت مهتمًا بالعثور على طريقة لحلها ، فمن المحتمل أن تجد المزيد من الأكواد الميتة. على سبيل المثال ، ربما يكون من الممكن دمج التجميعات ثم تشغيل تحليل الكود الميت عليها. أو ، قد يكون من الأسهل نشر معالجة ملفات CSV للعثور على كود عام مات فيها جميعًا. ericstj هل لديك أفكار؟

يسعدني مساعدة danmosemsft ،
أتفق معك ، بشأن تحسين هذه العملية ، من مراجعاتي ، فإن الرمز الأكثر تمييزًا لم يعد ميتًا ، إما ثابت أو غالبًا ما يستخدم في تجميع آخر كما قلت سابقًا. النظر إلى تلك الإيجابيات الكاذبة يجعل عملية البحث مملة بعض الشيء في رأيي.

لسوء الحظ ، لا أعرف كيفية إجراء تحليل ILMerge والشفرة الميتة أو معالجة ملفات CSV بعد ذلك. أنا على استعداد للتعلم / التعاون رغم ذلك ، إذا كنتم تريدون قضاء بعض الوقت في التدريس لي :)

أين نحن بهذا؟ هل يتم تحديث OP مع الفصول الدراسية المنجزة أم هل يجب أن نخرج هذا التعليق الآن؟

MisinformedDNA - استخدم https://github.com/dotnet/corefx/issues/17905#issuecomment -365349091 من فضلك

لا أعرف كيفية إجراء تحليل ILMerge والشفرة الميتة أو معالجة ملفات CSV. أنا على استعداد للتعلم / التعاون رغم ذلك ، إذا كنتم تريدون قضاء بعض الوقت في التدريس لي :)

لا أعرف أيضًا وسأضطر إلى التفكير / التجربة. في الوقت الحالي ، أنا مشغول تمامًا بإغلاق الإصدار 2.1 ، لذا سيتعين على هذا الانتظار قليلاً 😺

لقد كتبت نصًا لتحميل جميع ملفات CSV ثم تمت تصفيته إلى أكثرها قابلية للتنفيذ. لقد توصلت إلى 3942 قضية / فرصة.

أعتزم الآن إلقاء نظرة على كل قضية واتخاذ الإجراءات المناسبة. يمكنك متابعة تقدمي وترك التعليقات ، إذا كنت ترغب في ذلك ، على https://github.com/MisinformedDNA/corefx/tree/clean-dead-code

لطيف ، أتطلع إلى رؤية هذاMisinformedDNA.

لقد وجدت مشكلة في تحليل الكود الميت ، والتي تُظهر مشكلة أو نقصًا في الأداة.

يفيد التقرير بإمكانية إزالة ما يلي:

    Friend Enum vbErrors
        ObjNotSet = 91
        IllegalFor = 92
    End Enum

لكن تمت الإشارة إلى هذه Enums في مكان آخر ، لذلك دعونا نلقي نظرة على فرع واحد محتمل:

    ' 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" عبارة عن شيك null ، لذلك علينا أن نفترض أن شخصًا ما سيمرر null وأن هناك حالة مفقودة لتحديد الرمز الميت. وإذا كانت هناك مشكلة (أو أكثر) في تحديد الشفرة الميتة ، فقد لا يكون رمز واحد أو أكثر من Enums رمزًا ميتًا بعد كل شيء.

tldr: ملخص

السؤال 1: لماذا لم يتم وضع علامة على VbMakeIllegalForException للإزالة ، على الرغم من أنه لا يمكن استدعاء التعداد الذي تم وضع علامة عليه للإزالة.
السؤال 2: لماذا حالات الاختبار في تحديد الشفرة الميتة ، وعدم تمرير القيم الخالية لجميع المعلمات القابلة للتطبيق؟

تضمين التغريدة

من المحتمل أن تكون قيم التعداد مضمنة في 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.cspro.cspro ]Client.
SystemDataCommonDbConnectionStringCommon.cs (180،27): الخطأ CS0117: لا يحتوي "ADP" على تعريف لـ "InvalidConnectionOptionValue" [D: ReposcorefxsrcSystem.Data.SqlClientsrcSystem.Data.SqlClient.csproj]

تم تحديد جميع الأعضاء المفقودين بوضوح ليتم حذفهم في System.Data.Common.diff.html ، ولكن ليس فقط تسببهم في حدوث أخطاء في الفصول الفرعية ، ولكن لا توجد ملفات فرق لهذه الفئات الفرعية أو هناك تجميعات مرتبطة بها مثل System.Data.SqlClient .

الخطأ الأول الموضح أعلاه مرتبط بطريقة عامة SqlCommandBuilder.UnquoteIdentifier . لذلك لا أرى كيف يمكن إزالة ADP.RemoveStringQuotes من System.Data.Common بدون تغيير فاصل في الفصول الدراسية الأخرى.

كيف يمكنني التعامل مع هذه؟ أي أفكار لماذا يتم وضع علامة عليها للإزالة؟

anipik هل يمكنك مساعدة misinformeddna هنا؟

MisinformedDNA سيتعين عليك دائمًا إنشاء الريبو بالكامل وتشغيل الاختبارات لجميع المكتبات لأنه من الممكن أن تعتمد إحدى المكتبات على مكتبة أخرى بشكل مباشر (A باستخدام نوع من B) أو بشكل غير مباشر. (A باستخدام نوع ما من B والذي يستخدم نوعًا ما من C)
لا يوجد شيء في الوظيفة ADP.removeStringQuotes ، isemptyarray ، setTransaction خاص فقط بـ ApaterUtil أو System.Data.Common حتى نتمكن من نقله إلى sqlCommandBuilder.cs كطريقة ثابتة خاصة. إنهم يتلاعبون بالحجج فقط. إذا تمكنت من توجيهي إلى الفرع الذي يعاني من هذا الفشل ، فيمكنني مساعدتك في حالات الفشل الأخرى.

جميع الطرق التي ذكرتها أعلاه هي internal static methods والتي لم تعد مستخدمة في التجميع الذي تم تحديده.
لا يُقصد عمومًا استخدام الأعضاء الداخليين خارج التجمع الذي تم تحديده. ولكن في بعض الحالات نقوم بذلك باستخدام السمة `` مرئي داخلي لـ '' `.

danmosemsft هل تنقل هذه الوظائف الداخلية إلى التجميعات حيث يتم استخدامها على النحو الأمثل؟

ها هي الشوكة التي أعمل عليها: https://github.com/MisinformedDNA/corefx/tree/clean-dead-code

كما ذكرنا سابقًا ، يشير تحليل الكود الميت إلى أنه يمكن إزالة ADP.RemoveStringQuotes مقابل System.Data.Common . ومع ذلك ، نظرًا لأنه تم تمييز $ # ADP internal ، ربما افترض المحلل أنه لم يتم استخدامه خارج التجميع. لست متأكدًا مما إذا كانت تبحث عن السمة InternalsVisibleTo أم لا ، لكنها لن تكون مهمة إذا كانت كذلك ، لأنها لا تُستخدم هنا. بدلاً من ذلك ، تتم مشاركته عبر الملفات المرتبطة.

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

أفترض أن المحلل يرى فئات ADP المختلفة على أنها أنواع منفصلة ، بدلاً من أنواع مشتركة ، نظرًا لأنه يتم تكرارها بشكل أساسي. لذا ، في حين أن إزالة RemoveStringQuotes هو الشيء الصحيح الذي يجب فعله مقابل System.Data.Common ، فإن هذا هو الشيء غير الصحيح الذي يجب فعله عند التفكير في المشاريع الأخرى المرتبطة به.

ما لم يتمكن المحلل من تحديد أن كل هذه الفئات تأتي من نفس الملف ، فسوف نعتقد دائمًا أن لدينا كودًا ميتًا في بعض هذه الملفات.

ما لم يكن لدى شخص ما اقتراح أفضل ، سأبدأ في إضافة هذه الطرق مرة أخرى إلى الكود.

MisinformedDNA تحدثت عن هذا مع danmosemsft غير متصل. طريقة أخرى ممكنة هي جعل فئة ADP جزئية. وبعد ذلك يمكنك نقل هذه الوظائف إلى هذه المكتبات.

لقد قدمت أول علاقات عامة خاصة بي ، لكن فشل 2 من البنيات. يبدو أن كلا من فشل البناء يشير إلى انتهاء المهلة. ما الإجراء الذي يجب علي اتخاذه لحل هذا؟

راجع https://github.com/dotnet/corefx/pull/28795

سوف ألقي نظرة على System.Private.Uri

إليك تطبيق (تطبيقات) كتبته لتنزيل جميع الملفات ودمجها ثم تصفية كل تلك التي من المحتمل أن تكون إيجابية كاذبة. نأمل أن يكون مفيدًا للآخرين.

ericstj هل يعقل إعادة إنشاء البيانات حتى يكون لدينا صورة أوضح عن مكاننا مع هذا؟

بدأت في مساحات الأسماء التالية:

  • نظام. مجموعات. متخصص

    • خاصيتان فقط من CompatibleComparer ، لكن الملف في src / مشترك وأوسع في الاستخدام.

  • System.Diagnostics.DiagnosticSource
  • System.Diagnostics.FileVersionInfo
  • النظام ، التشخيص ، العملية
  • System.Diagnostics.StackTrace
  • System.Diagnostics.TextWriterTraceListener
  • System.Diagnostics.Tools
  • System.Diagnostics.TraceSource
  • النظام.التشخيص.التتبع

لقد قمت بإعادة إنشاء البيانات. ها هي كقائمة جديدة ، لم أرغب في الكتابة فوق ما كان موجودًا في حال وجده الأشخاص مناسبًا.

  • [] [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.solatedStorage
  • System.IO.MemoryMappedFiles
  • System.IO.Pipes
  • ذاكرة النظام

تنظيف الأكواد الميتة من أجل:
System.Diagnostics.DiagnosticSource
System.Diagnostics.FileVersionInfo
النظام ، التشخيص ، العملية
System.Diagnostics.StackTrace
System.Diagnostics.TextWriterTraceListener
System.Diagnostics.Tools
System.Diagnostics.TraceSource
النظام.التشخيص.التتبع
النظام ، الرسم ، الأساسيات

دوت نت / corefx # 33095

أود أن أتولى عملية التنظيف System.IO.Compression كأول مساهمة لي.

في بداية المنشور ، تم وضع علامة "تم" على System.Console ، ولكن في البيانات المُعاد إنشاؤها ، لم يتم تمييزها. لقد اكتشفت أنه يلزم محو بعض سلاسل SR فقط.
لذا ، ericstj ، هل هو نوع من الخطأ أو يمكنني إلقاء نظرة على المكتبات الأخرى وإصلاح هذه الرموز الصغيرة الميتة؟

ملخص

لقد أنشأت أداة صغيرة تزيل بعض الأشياء عديمة الفائدة من هذه البيانات .


يزيل:

  1. كل const التي تم وضع علامة عليها باللون الأحمر.

هذا هو واحد شائع جدا. أي شيء يحتوي على "const" ، من فضلك تجاهلها. هذه كلها حقول قام المترجم بتضمينها ، ونريد الاحتفاظ بها في المصادر. عادة ints والسلاسل.

  1. جميع الأشياء التي لم يتم تمييزها باللون الأحمر (هذا الرمز لم يمت).

يبقى:

  1. أي فئة أو بنية على مستوى التعشيش تحتوي على كود ميت. يساعد في العثور على هذا الرمز بشكل أسرع.
  2. كل سلاسل SR التي يمكن إزالتها. لكن أساليب SR لم تتم إزالتها أيضًا ، انتبه.

أي شيء يعتبر "سلسلة ثابتة" في "فئة SR" خاص. بدلاً من تحرير ملف C # ، يجب عليك العثور على الإدخال المطابق في ملف .resx وإزالته. يوجد ملف .resx لمكتبة في srcsrcResourcesstrings.resx. سيتم إعادة إنشاء الإصدار SR بعد القيام بذلك. تجاهل أي شيء آخر في "فئة SR" - هناك العديد من الطرق التي قد تظهر على أنها ميتة.

  1. فئات بها مُنشئ واحد فقط بدون معلمات. يساعد على تجنب فعل أي شيء معهم.

تجاهل أي منشئات خاصة بدون معلمات. لدينا هذه في الكود لمنع إنشاء مثيل للفصل عن طريق الخطأ ، ونريد الاحتفاظ بها في الكود.

تجاهل أي منشئات عامة بدون معلمات إذا لم تكن هناك منشئات أخرى. هذه ليست حقيقية.


ايضا:

يمكنك العثور على الملفات التي تم مسحها هنا . أذكرني بعد تحديث البيانات وسوف أقوم بتحديث ذلك.

ericstj هل إزالة internal enum آمن؟

بعد استخدام هذه الأداة ، قمت بفحص جميع التجميعات. البعض منهم ليس لديه أي رمز ميت.
القائمة المحدثة تبدو مثل ما يلي. أقوم بتغيير الروابط إلى htmlpreview للملفات التي تم مسحها من مستودع الأداة . آمل ألا يمانع أحد.

لذا ، ericstj ، هل هو نوع من الخطأ أو يمكنني إلقاء نظرة على المكتبات الأخرى وإصلاح هذه الرموز الصغيرة الميتة؟

عند تجديد الاختلافات بدأت مع مسح كل شيء مرة أخرى. آلية عمل فرق الشفرة الميتة يدوية للغاية. إنها تستخدم أداة داخلية لتجميع الاختلافات.

ericstj هل إزالة التعداد الداخلي آمن؟

يعتمد ذلك على ما يتم عمله بهذا التعداد الداخلي. غالبًا ما تظهر Enums على أنها ميتة في النظام الثنائي لأن المترجم يحول مرجع مصدره إلى أعداد حرفية صحيحة. من المحتمل أن تجد أن المصدر قد لا يزال بحاجة إليه.

فقط بعض الأفكار حول كيف يمكننا جعل هذه الشفرة الميتة تنظف تجربة أفضل تكون أكثر استقرارًا في المضي قدمًا.

  1. أضف أداة فرق إلى الفتح. لقد كنت أستخدم AsmDiff وهو داخلي. يمكننا فتح مصدر ذلك أو إنشاء شيء جديد أعلى المكتبات الحالية (SRM أو CCI أو Cecil).
  2. اسمح للمشروعات بالاشتراك في هذا التحقق من عدم وجود رمز ميت وقم بإيقاف الأشياء التي تفتقدها الأدوات.
  3. كرر في 2 بوضع الاستدلال في قواعد مختلفة و / أو تصفية.
  4. بمجرد حصولنا على وظائف كافية في الأدوات ، قم بتمكينها من أجل الريبو بالكامل ، والتزم بخطوط الأساس حيث نسمح بالرمز الميت ولن نضطر أبدًا إلى العودة إلى هذه المشكلة مرة أخرى 😄

اليوم الآلية التي نستخدمها للشفرة الميتة لاهتزاز الشجرة هي الرابط الذي يعمل على الثنائيات. لذا لإعادة تعيين ذلك إلى المصدر ، فإننا نفرق بين مخرجاته والمدخلات ونبعث المعرفات. هناك شيء آخر ناقشته مع مستخدمي الرابط في الماضي وهو إرسال المزيد من عمليات التسجيل التي يمكن أن تعود بشكل مباشر إلى الأشياء التي يهتم بها مطورونا. إنه يعمل أيضًا على PDBs لذا فهو يحتوي تقنيًا على جميع التعليمات البرمجية المصدر ومعلومات الخط.

ericstj هل من الممكن تقنيًا التشغيل على corelib؟ لقد لاحظت وجود طريقة ميتة في كوريليب ، ولا شك أن هناك المزيد. بالتأكيد سيحتاج إلى رعاية نظرًا لجميع عمليات الاسترجاعات من VM

danmosemsft يتم تشغيله بالفعل على System.Private.Corelib.dll كجزء من بناء coreclr. ما هي الطريقة الميتة التي لاحظت أنها لم تتم إزالتها؟

ericstj أعتقد أنه يمكننا إغلاق هذا؟

أعتقد أن هذا تم القيام به الآن. شكراً جزيلاً لكل من ساهم في تحسين قاعدة الرموز الخاصة بنا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات