12

我正在开发一个 PowerShell v3 模块,该模块需要使用一些外部 .NET 程序集中包含的类型。

我希望这个模块能够合理地自包含以便于部署,并且我不想依赖在 GAC 中加载的这些程序集。理想情况下,我想将所需的程序集 dll 放在模块文件夹中,然后在加载模块时依靠 PowerShell 自动加载这些程序集。

我知道我可以使用 Add-Type 命令强制加载程序集,如下所示:

Add-Type -AssemblyName "Some.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=sometoken"

但我也阅读了模块清单中所需的程序集属性,我希望这种方法可以消除看似脆弱的 Add-Type 代码:

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()

引用模块内的外部程序集最可靠的方法是什么?加载模块时,在清单中声明依赖项会隐式加载程序集吗?如果我利用模块清单来列出所需的程序集,我还需要编写加载程序集的代码吗?

我真的不是在寻找一个简单的“让它工作”的解决方案,因为我已经使用 Add-Type 方法让它工作了......我正在寻找最可靠的方法的指导和建议。

4

1 回答 1

11

其参数的New-ModuleManifest文档-RequiredAssemblies同意:

指定模块所需的程序集 (.dll) 文件。输入程序集文件名。Windows PowerShell 在更新类型或格式、导入嵌套模块或导入在 RootModule 键的值中指定的模块文件之前加载指定的程序集。

使用此参数列出模块所需的所有程序集,包括必须加载以更新 FormatsToProcess 或 TypesToProcess 键中列出的任何格式或类型文件的程序集

而且我找不到任何不同的东西(例如在MSDN上)。

于 2013-08-28T19:37:37.073 回答