C# net如何决定加载哪个程序集?
我试图理解.net如何决定加载哪个版本的程序集。 作为测试,我在ildasm中打开了第三方程序的一个程序集。 在清单中,我发现以下内容:C# net如何决定加载哪个程序集?,c#,.net,C#,.net,我试图理解.net如何决定加载哪个版本的程序集。 作为测试,我在ildasm中打开了第三方程序的一个程序集。 在清单中,我发现以下内容: .assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. .ver 2:0:0:0 } 由于CLR版本为2.0,程序使用.net 2.0、3.0或3.5。 我在我的计算机上找到了61个版本的mscorlib.d
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
由于CLR版本为2.0,程序使用.net 2.0、3.0或3.5。
我在我的计算机上找到了61个版本的mscorlib.dll。当我运行工具sn-T时,我发现其中一些具有与上面相同的公钥。使用程序集绑定日志查看器,我准确地找到了.net实际使用的是哪一个(3.5.1版本),但是.net是如何决定的呢?在我看来,舱单上的信息是不够的。我希望清单包含另一个唯一标识.dll的键。此外,我还希望该密钥是.dll的CRC校验和,以确保.dll未被篡改。甚至还有您必须观看的版本:-)
.ver 2:0:0:0
,这里不使用它,但甚至还有区域性(Microsoft程序集与区域性无关)(它是.locale
)名称+版本+公钥令牌就足够了(您通常会使用包含所有这些内容的完全限定名称)。请注意,如果您没有正确更改版本,.NET可能会假定具有相同版本的“较新”程序集实际上是相同的程序集-这毕竟是您要说的。仍然比DLL地狱好很多:)@Luaan即使区域性/区域设置是完整限定名称的一部分(但很少使用)。NET assembly loading“给你一个非常彻底的MSDN页面作为第一个点击:-有没有一个不令人满意的原因?@Andy:如果有CRC校验和,那么就没有办法修复库中的错误。公钥令牌足以保证库由与原始库相同的受信任方发布。