【问题标题】:What should I use instead of LoadWithPartialName()?我应该使用什么来代替 LoadWithPartialName()?
【发布时间】:2009-07-14 12:08:57
【问题描述】:
我正在使用 LoadWithPartialName() 加载程序集,但 VS 告诉我它已过时并改用 Load()。但是,我找不到任何方便的重载。
有一个 Load(string) 要求输入一个“全名”,如果我对 MSDN 文档的理解正确,它包括版本号等内容。
还有一个接受“显示名称”的负载(字符串,证据)。问题是我根本不知道“显示名称”是什么,因为我在第一个函数中使用的“部分名称”似乎不起作用。
那么,应该怎么做呢?
【问题讨论】:
标签:
c#
reflection
obsolete
【解决方案1】:
这就是我所做的。作为示例,我将“Microsoft.AnalysisServices”加载到 PowerShell 中。
- 打开包含程序集的 GAC 文件夹。它可以是以下任何一种:
C:\Windows\Microsoft.NET\assembly\GAC_32
C:\Windows\Microsoft.NET\assembly\GAC_64
C:\Windows\Microsoft.NET\assembly\GAC_MSIL
- 在该文件夹中,打开您的程序集的文件夹。
- 在该文件夹中,您将看到另一个文件夹,如下所示:
v4.0_15.0.0.0__89845dcd8080cc91
- 将其分解为组成部分:
- v4.0(我认为这是 .NET 版本,但这里不需要。)
- 15.0.0.0(这是你要找的版本)
- 89845dcd8080cc91(这是公钥)
-
现在你可以创建你的程序集字符串了。
[System.Reflection.Assembly]::Load("Microsoft.AnalysisServices, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
对于 .NET 程序集,Culture 始终为 neutral。