Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
如何可靠地引用PowerShell v3模块中的外部.NET程序集?_Powershell_Powershell 3.0_Powershell Module - Fatal编程技术网

如何可靠地引用PowerShell v3模块中的外部.NET程序集?

如何可靠地引用PowerShell v3模块中的外部.NET程序集?,powershell,powershell-3.0,powershell-module,Powershell,Powershell 3.0,Powershell Module,我正在处理PowerShell v3模块,该模块需要处理一些外部.NET程序集中包含的类型 我希望此模块能够合理地自包含,以便于部署,我不希望依赖GAC中加载的这些程序集。理想情况下,我希望将所需的程序集dll放在模块文件夹中,然后在加载模块时依靠PowerShell自动加载这些程序集 我知道我可以使用Add Type命令强制加载程序集,如下所示: Add-Type -AssemblyName "Some.Assembly, Version=1.0.0.0, Culture=neutral, P

我正在处理PowerShell v3模块,该模块需要处理一些外部.NET程序集中包含的类型

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

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

Add-Type -AssemblyName "Some.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=sometoken"
但我也读过模块清单中的RequiredAssemblys属性,我希望这种方法可以消除看似脆弱的Add类型代码:

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()
参考模块内外部组件的最可靠方法是什么?在加载模块时,在清单中声明依赖项是否会隐式加载程序集?如果我利用模块清单列出所需的程序集,我还需要编写加载程序集的代码吗

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

-requiredAssembly
参数的文档同意:

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

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


而且我找不到任何不同的(例如on)。

您知道如何可靠地列出此属性中的程序集吗?如果我使用完全限定名并将程序集dll放在模块的文件夹中,这是否足够,或者我是否需要提供某种路径?程序集加载器在哪里查找这些程序集?@syneptody加载规则记录在:我认为PSH在这里没有做任何特别的事情,只是将模块的目录添加到该搜索路径中。也许下面是一个例子(比如?@syneptody),我在psd1文件中有程序集名称,该程序集位于脚本的同一目录中,它可以正常工作。例如
requiredsassemblies=@('IHE.CDA.Generation.Trifolia')
将dll文件放在同一目录中可以省去麻烦。在组织上,也许值得把它们放在一个分区里?比如说/bin??有什么坏处吗?