我应该使用什么而不是LoadWithPartialName()?

rav*_*ven 18 c# reflection obsolete

我正在使用LoadWithPartialName()加载程序集,但VS告诉我它已过时并使用Load()代替.但是,我找不到任何方便的过载.

有一个Load(字符串)请求"全名",如果我理解正确的MSDN文档,包括版本号之类的东西.

还有一个Load(string,Evidence)接受"显示名称".问题是我没有丝毫知道"显示名称"是什么,因为我使用第一个功能的"部分名称"似乎不起作用.

那么,应该怎么做呢?

Cla*_*gon 10

以下文章解释了为什么它已经过时:http: //blogs.msdn.com/suzcook/archive/2003/05/30/57159.aspx.

底线是:使用Load并为其提供版本号.

  • 谢谢.但是我正在开发一个带有定义接口的插件系统,它永远不会改变.它似乎正确使用最新版本,没有人不必担心它.事实上,你的链接的一个评论者似乎处于相同的情况.此更改将强制用户告诉应用程序使用哪个版本,这对我来说似乎不合理.为了避免这种情况,我将不得不总是使用相同的版本号,这本身就是一个地狱. (20认同)

Slo*_*ire 1

这就是我所做的。我将“Microsoft.AnalysisServices”加载到 PowerShell 中作为示例。

  1. 打开包含程序集的 GAC 文件夹。它可以是以下任意一项:
    • C:\Windows\Microsoft.NET\assembly\GAC_32
    • C:\Windows\Microsoft.NET\assembly\GAC_64
    • C:\Windows\Microsoft.NET\assembly\GAC_MSIL
  2. 在该文件夹中,打开程序集的文件夹。
  3. 在该文件夹中,您将看到另一个文件夹,如下所示:
    • v4.0_15.0.0.0__89845dcd8080cc91
  4. 将其分解为几个组成部分:
    • v4.0(我认为这是.NET版本,但我们这里不需要它。)
    • 15.0.0.0(这是您正在寻找的版本)
    • 89845dcd8080cc91(这是公钥)
  5. 现在您可以创建汇编字符串。

    [System.Reflection.Assembly]::Load("Microsoft.AnalysisServices, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
    
    Run Code Online (Sandbox Code Playgroud)

对于 .NET 程序集,Culture始终为neutral.