حل تعارضات نگارشهای مختلف اسمبلیها در برنامههای NET. با استفاده از ابزار dotnet list package
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۹/۲۷ ۱۰:۰۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
Could not load file or assembly XYZ or one of its dependencies. The system cannot find the file specified
dotnet list package با گزینه --include-transitive، یک راهکار ساده و قدرتمند برای شناسایی این مشکلات ارائه میدهد. این ابزار به شما کمک میکند تا وابستگیهای پروژه یا سولوشن را به طور کامل بررسی کنید، بدون نیاز به ابزارهای پیچیدهی خارجی. در این مقاله، به بررسی نحوهی استفاده از این فرمان میپردازیم، با تمرکز بر دیباگ تعارضات نسخه، و نکاتی برای حل آنها اضافه میکنیم. هدف این است که شما بتوانید به سرعت مشکلات را شناسایی و رفع کنید، تا زمان توسعه را بهینه سازید.System.IO.FileLoadException: Could not load file or assembly 'System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
dotnet list package این کار را آسان میکند. نکته مهم: قبل از اجرای این فرمان، سولوشن یا پروژه را بسازید (build) کنید تا اطلاعات وابستگیها بهروز باشد.dotnet list package
--include-transitive استفاده کنید. اگر سولوشن شما چند فریمورک هدف (target framework) دارد، فریمورک را با --framework مشخص کنید. مثالی برای یک سولوشن:dotnet list MyTestSolution.sln package --include-transitive --framework net5.0
dotnet list MyTestSolution.sln package --include-transitive --framework net5.0 > mytestsln-dependencies.txt
System.Security.Cryptography.Xml وابسته هستند، خروجی ممکن است شبیه زیر باشد:Project 'TestProject-A' has the following package references [net5.0]: Top-level Package Requested Resolved > SoapCore 1.0.0 1.0.0 > System.Configuration.ConfigurationManager 4.7.0 4.7.0 Transitive Package Resolved > System.Security.Cryptography.ProtectedData 4.7.0 > System.Security.Cryptography.X509Certificates 4.3.0 > System.Security.Cryptography.Xml 4.5.0 # The rest of the dependencies is omitted... Project 'TestProject-B' has the following package references [net5.0]: Top-level Package Requested Resolved > Newtonsoft.Json 11.0.2 11.0.2 > External.Client.Core 7.0.3 7.0.3 > External.Client.Portal 7.0.3 7.0.3 > System.Data.DataSetExtensions 4.5.0 4.5.0 > System.Security.Permissions 5.0.0 5.0.0 Transitive Package Resolved > System.Security.Cryptography.ProtectedData 4.7.0 > System.Security.Cryptography.X509Certificates 4.3.0 > System.Security.Cryptography.Xml 4.7.0 # The rest of the dependencies is omitted...
dotnet add package استفاده کنید.<dependentAssembly> <assemblyIdentity name="System.Security.Cryptography.Xml" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.7.0.0" newVersion="4.7.0.0" /> </dependentAssembly>
dotnet list package را بررسی کنید.dotnet list package --include-transitive یک ابزار ضروری برای هر توسعهدهنده .NET است که به شما امکان میدهد وابستگیها را به طور جامع بررسی کنید و تعارضات نسخهها را سریع شناسایی نمایید. با ترکیب این فرمان با راهکارهایی مانند binding redirects یا بهروزرسانی بستهها، میتوانید از خطاهای زمان اجرا جلوگیری کنید و کیفیت کد را افزایش دهید.