皇冠平台 你的位置:皇冠注册正网 > 皇冠平台 > 皇冠炸金花博彩平台资讯_简述 C# 中期骗门径集的装载过程
皇冠炸金花博彩平台资讯_简述 C# 中期骗门径集的装载过程

发布日期:2023-10-30 02:52    点击次数:83


皇冠炸金花博彩平台资讯_简述 C# 中期骗门径集的装载过程

皇冠炸金花博彩平台资讯_

本文转载自微信公众号「DotNET技巧圈」皇冠捕鱼,作家michaelscode。转载本文请磋商DotNET技巧圈公众号。

博彩平台资讯 了解门径集如安在C#.NET中加载

咱们一直在处理库和NuGet软件包。不论是好是坏,高等.NET设备东谈主员王人需要了解.NET运行时怎样加载门径集。

这些库依赖于其他流行的库,况且有许多分享的依赖项。有了敷裕大的依赖磋商网罗,您最终将堕入打破或窘境。处理此类问题的最好方法是了解该机制在里面的职责步地。

在本文中,您将看到.NET程度怎样故及何时加载援用的门径集。

您将了解加载了哪个库版块,当有多个可用版块时会发生什么,以及为什么随机由于版块打破而出现问题。

您将看到怎样调试这些类型的问题,查抄门径集绑定日记(交融日记)以及一些贬责打破的方法。

门径集,模块和援用

让咱们从围绕.NET过程的一些基本术语运行。

一个安设在.NET是一个DLL或EXE文献。Visual Studio贬责决策中的每个样子王人被编译为一个门径集。

每个门径集不错包含多个模块,关联词骨子上,咱们险些老是在一个门径长入有一个模块,该模块的称呼与该门径集疏浚。

在Visual Studio中启动程度或单击F5时,将履行启动样子门径集。除了.NET Framework或.NET Core门径集除外,它将是第一个加载的门径集。

心跳

之后,该过程将笔据需要在运行时加载其他门径集。仅当需要调用该门径集的方法或使用该门径集的类型时,它才会延长加载门径集。

皇冠手机登录入口

这里是为一个简便的“ Hello World” .NET Framework样子加载的模块(出于咱们通盘的意图和见解,模块和门径集王人是疏浚的)。MyStartup.dll是此处的启动样子:

皇冠客服飞机:@seo3687

.NET Core样子启动时加载的模块

当您从另一个样子援用一个样子时,在构建时,被援用样子的DLL或EXE被复制到启动样子的Bin文献夹中。

常常是Bin \ Debug或Bin \ Release。在运行时,当您第一次使用援用的样子中的类型时,CLR在期骗门径目次中查找具有与生机的称呼和版块疏浚的DLL文献。然后将门径集加载到过程中。这也称为绑定到安设件。

这是一个例子:

东方蒙地卡罗

假定咱们有一个名为MyStartup的简便遗弃台期骗门径,它援用了另一个名为Lib1的样子。MyStartup使用Lib1门径长入的某些类。

在MyStartup中:

class 皇冠捕鱼Program {     static void Main(string[] args)     {         int a = int.Parse(Console.ReadLine());         int b = int.Parse(Console.ReadLine());         Console.WriteLine("A + B = " + Add(a, b));     }      private static int Add(int a, int b)     {         var calculator = new Lib1.Calculator();         return calculator.Sum(a, b);     } } 

在Lib1中:

public class Calculator {     public int Sum(int a, int b)     {         return a + b;     } 

输入Main方法时,尚未加载Lib1门径集。关联词,在输入Add方法时,CLR尝试领路Calculator类型,找出它在援用的门径集Lib1中,然后尝试加载该门径集。

.NET中的门径集绑定

当CLR需要加载门径集时,逻辑骨子上比在Bin文献夹中查找要复杂一些。这是履行的骨子逻辑(磋商忽闪评释,请参见Microsoft文档[1]):

1.笔据确立文献(app.config或web.config)详情需要加载的门径集的版块。该确立文献的称呼为(在生成之后) [executable name].exe.config或web.config。绑定重定向在这里证实了作用(稍后会忽闪先容)。

2.查抄门径集是否已加载。淌若加载了其他版块,则将抛出FileLoadException,除非它是一个不错同期加载多个版块的强定名门径集。

3.淌若它是强称呼门径集,请检验全局门径集缓存[2](GAC)。GAC是机器上分享多个期骗门径部件的方位。淌若需要的话,门径蚁合缓存。它只可存储强定名门径集。它不错存储团结门径集的不同版块。您不错使用gacutil.exe[3]我方将其安装到GAC 。

一名体育明星曝皇冠下注,最终导致事业生活翻天覆地变化。

4.淌若它是一个强称呼的门径集,况且确立文献包含节点,那么它将检验那处的门径集位置。淌若该节点存在况且找不到门径集,zh皇冠90比分网FileNotFoundException则将激发a。

5.笔据启发式算法检验门径集DLL或EXE。此过程称为“探伤”。算法如下:

检验文献夹[application base] / [assembly name].dll。期骗门径库是期骗门径可履行文献所在的位置。常常, 皇冠网址您的Bin \ Debug或Bin \ Release文献夹。 检验一下 [application base] / [assembly name] / [assembly name].dll 淌若为援用的门径集指定了区域性信息, 皇冠赌博则仅检验以下目次: [application base] / [culture] / [assembly name].dll [application base] / [culture] / [assembly name] / [assembly name].dll 淌若该 节点存在于确立文献中,则它将在该privatePath节点的属性指定的文献夹中查找门径集。

他们为什么要使通盘事情变得如斯费事,对吗?

骨子上,这种逻辑相当有助于咱们发展,而不会使事情变得费事。它的存在是为了终了一些紧迫指标:

皇冠炸金花 为了确保您援用的是特定的门径集和版块,则将加载该真确版块。不然,将激发相当。而且,淌若您知谈我方在作念什么,则不错在确立文献中指定隐敝要领(绑定重定向)。 为了生动地在您要加载的门径长入进行。举例,淌若要笔据不同的区域性(谈话)加载不同的门径集,则不错毛糙地作念到这少许。或者,淌若您要笔据客户确立加载不同的门径集,那也不错。 为了安全起见,咱们使用了全称的门径集。他们确保您不成“伪造”门径集。举例,淌若某个程度但愿加载Lib1 v4.5,那么您将无法加载具有疏浚称呼和版块的坏心软件门径集。加载时会激发相当。这等于为什么在策画机上通盘程度王人分享的GAC只接纳强称呼门径集的原因。

在大多量期骗门径中,您无需记取门径集加载和探伤的复杂逻辑。您无需了解或辩论GAC,全名门径集或操作确立文献。

您险些根柢不需要辩论库的版块,皇冠注册因为可能的打破通过称为“绑定重定向”的机制自动贬责了。

绑定重定向

淌若有一件事关于了解这笔交游相当紧迫,那等于绑定重定向。或者告诉运行时它将骨子加载哪个版块,而不论其援用的版块怎样。

火博体育黑钱

这是一个示例:您的过程有两个样子(模块):样子A和样子B。样子A援用log4net.dll v1.1,样子B援用log4net.dll v1.2。两个log4net DLL文献王人复制到输出文献夹,关联词只可有一个log4net.dll文献。

假定复制到输出文献夹的文献是log4net.dll v1.2。假定到达的第一个代码是Project A中的代码,该代码援用了log4net v1.1。运行时将在输出文献夹中查找,找到不同版块的log4net,并失败FileLoadException。

皇冠体育注册

还有另一种可能。假定最初履行了样子B中的代码,况且在尝试使用log4net时,它收效加载了log4net.dll v1.2。蓦然之后,Project A中的代码将尝试使用log4net v1.1,请参见该门径集一经加载了其他版块,并抛出FileLoadException。

淌若您知谈哪个log4net版块将在输出文献夹中,在这种情况下不错作念的等于告诉运行时应该使用哪个版块。只需app.config在该runtime部分的文献中添加以下几行:

<?xml version="1.0" encoding="utf-8" ?> <configuration>   ...   <runtime>     ...     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">       <dependentAssembly>         <assemblyIdentity name="log4net"                            publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />         <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="1.2.0" />       </dependentAssembly>     </assemblyBinding>   </runtime>   ... </configuration> 

 这意味着,只消运行时想绑定到版块限制为0.0.0.0to的门径集log4net 5.0.0.0,它就会尝试绑定到version 1.2.0。

骨子上,您毋庸手动添加这些重定向,因为它们是自动添加的。淌若转到启动样子的“属性”,则会看到以下确立:

图片-20200711101325128

默许情况下选中此选项。它会自动检测版块打破并在.config文献中生成绑定重定向。

当问题运行发生时

乍一看,绑定重定向可能看起来像是对通盘问题的谜底,但事实并非如斯。使用绑定重定向时,基本上使用的库版块与预期不同。淌若删除方法奈何办?或方法的签名已转换?在这种情况下,调用该方法时,门径将因运行时失实而失败。毕竟,创建版块是有原因的。

美高美景格酒店

淌若确乎存在此类问题,则有贬责方法。查抄我的著述:怎样贬责.NET援用和NuGet软件包版块打破[4]。

故障摈弃

当您有一个FileLoadException或访佛的东西时,我提议作念的第一件事是查抄Visual Studio中的“模块”窗口。在这里,您将看到通盘已加载的模块,并详情您要加载的门径集是否已加载,使用哪个版块以及从哪个旅途加载。

除此除外,您还不错查抄门径集绑定日记,也称为交融日记。这些日记将披露在门径集绑定尝试过程中到底发生了什么。您将看到运行时查找的门径集版块,运行时查找的文献夹以及故障点。

有几种查抄交融日记的方法。最初,您必须启用它们,因为默许情况下它们是禁用的。您不错通过将HKLM\Software\Microsoft\Fusion\ForceLog值确立为1并将HKLM\Software\Microsoft\Fusion\LogPath值确立为来在注册表中手动启用它们C:\FusionLogs。日记将自动出现。或者,您不错使用Fusion Log Viewer,该软件应以步地安装在PC上fuslogvw.exe。我提议使用“一切窗口”搜索之[5]类的门径来查找它。确保以经管员权限运行交融日记查抄器,以便或者启用和禁用日记。最近更流行的一种更当代的器具是Fusion ++[6]。

边注

也许您不需要,关联词我昔时愤懑不得不处理这类问题。举例一个逻辑上的问题,让我构建一些东西,致使贬责一个分娩失实,但其他问题王人好说,惟有这个……。

在这件事上别无聘任,我不得不贫困地学习门径集绑定的里面职责。我发现,就像其他通盘内容雷同,一朝您和会了某些内容,它就会变得不那么可怕,致使变得不再那么真谛了。

因此,我但愿本文对您挑升想,并会在我走过的谈路上为您提供快速匡助。

References

[1] Microsoft文档: https://docs.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies

[2] 全局门径集缓存: https://docs.microsoft.com/en-us/dotnet/framework/app-domains/gac

单某某发现许多人为了秒杀商品苦练“手速”、熬夜等商品上架,于是他编写了抢购软件,命名为“神奇”向外出售。该软件能够在一秒内实现商品的自动抢购,且用户可同时登录多个账号,增加秒杀成功的几率。

猫抓病又称猫抓热,是由革兰阴性的汉塞巴尔通菌(Bartonella henselae)感染而引起的淋巴结的化脓性肉芽肿性炎,猫是该致病菌的携带者,多数患者有被猫抓、咬或舔的历史,病原菌经皮肤进入人体。汉塞巴尔通菌位于猫的循环红细胞内,携带病菌的猫无症状,病菌经跳蚤、虱子传播给人。刚出生的小猫或幼猫比成年猫更容易携带细菌。

[3] gacutil.exe: https://docs.microsoft.com/en-us/dotnet/framework/tools/gacutil-exe-gac-tool

[4] 怎样贬责.NET援用和NuGet软件包版块打破: https://michaelscodingspot.com/how-to-resolve-net-reference-and-nuget-package-version-conflicts/

皇冠hg86a

[5] 一切窗口”搜索之: https://www.voidtools.com/

[6] Fusion ++: https://github.com/awaescher/Fusion/

 



Powered by 皇冠注册正网 @2013-2022 RSS地图

皇冠体育皇冠体育导航皇冠客服