Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# net如何决定加载哪个程序集?_C#_.net - Fatal编程技术网

C# net如何决定加载哪个程序集?

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

我试图理解.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.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校验和,那么就没有办法修复库中的错误。公钥令牌足以保证库由与原始库相同的受信任方发布。