【问题标题】:Loading assembly via reflection succeeds, Add-Type does not通过反射加载程序集成功,Add-Type 没有
【发布时间】:2014-12-10 23:38:42
【问题描述】:

我在 Powershell 中使用 .net 程序集。此代码成功运行:

[Reflection.Assembly]::LoadFile("E:\Workspaces\RTE\dh.PSP.Common\Mainline\Source\dh.Common.MetaData\bin\dh.Common.Metadata.dll")
$marketMetadataRepository = New-Object dh.Common.Metadata.MarketMetadataRepository

结果:

GAC 版本位置

--- -------- -------- 错误 v4.0.30319
E:\Workspaces\RTE\dh.PSP.Common\Mainline\Source\dh.Common.MetaData\bin\dh.Common.Metadata.dll

所以人们会认为这也会成功:

Add-Type -AssemblyName
"E:\Workspaces\RTE\dh.PSP.Common\Mainline\Source\dh.Common.MetaData\bin\dh.Common.Metadata.dll"

但没有:

Add-Type : 无法加载文件或程序集 'E:\Workspaces\RTE\dh.PSP.Common\Mainline\Source\dh.Common.MetaData\bin\dh.Common.Metadata.dll' 或其依赖项之一。给定的程序集名称或代码库是 无效的。 (HRESULT 异常:0x80131047)

我很困惑为什么一种方法可行而另一种方法不可行。有什么想法吗?

【问题讨论】:

  • 您看到[Reflection.Assembly]::LoadFrom()[Reflection.Assembly]::Load() 的行为是否相同?我的印象是 LoadFile() 不是专门用于使用的,因为它允许您加载具有相同身份的多个文件。

标签: .net powershell


【解决方案1】:

Add-Type 的 -assemblyname 参数需要完整或部分程序集名称。尝试改用-path

【讨论】:

  • 完美。谢谢马丁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
相关资源
最近更新 更多