【问题标题】:Manifest not processed when loading module加载模块时未处理清单
【发布时间】:2015-10-06 20:15:22
【问题描述】:

我已经创建了一个 PowerShell 模块和一个清单,但在加载模块时似乎没有处理清单。

我创建了一个具有相同行为的非常简单的示例:

TestModule.psm1

function Foo
{
    return "Bar"
}

然后我创建一个这样的清单:

$version = New-Object System.Version(0, 0, 1, 0)

New-ModuleManifest -Author "Remko Weijnen" -Description "TestModule" -ModuleVersion $version  -PowerShellVersion 3.0 `
    -Path ".\TestModule.psd1" -RootModule ".\TestModule.psm1"

我创建了一个文件夹TestModule 并将TestModule.psm1TestModule.psd1 放入其中。

导入清单时,版本被正确识别:

Import-Module .\TestModule.psd1
Get-Module TestModule | select name, version

Name       Version
----       -------
TestModule 0.0.1.0

但是,当我加载模块时,无法识别版本:

Import-Module .\TestModule.psm1
Get-Module TestModule | select name, version

Name       Version
----       -------
TestModule 0.0

我错过了什么吗?还是不应该这样工作?

【问题讨论】:

  • 如果您将文件夹放在<user>\documents\windowspowershell\modules 文件夹中,然后只执行import-module testmodule,版本是否显示正确?
  • @TheMadTechnician 是的,有效
  • 那么这就是你应该期望它的工作方式。当您显式导入 .psm1 文件时,您会绕过清单。 .psm1 文件中没有任何内容表明要加载清单。如果您遵循我的第一条评论中描述的“正常”模块行为,那么清单将按预期加载。这能回答你的问题吗?
  • 如果您将评论更改为答案,我可以接受。这证实了我的想法(虽然希望是错的)。

标签: powershell module manifest powershell-3.0


【解决方案1】:

这几乎是你应该期望它工作的方式。当您显式导入 .psm1 文件时,您会绕过清单。 .psm1 文件中没有任何内容表明要加载清单。如果您遵循“正常”模块行为(通过将模块“安装”到 modulepath 环境变量中列出的路径),那么清单将按预期加载。

【讨论】:

  • 请注意,您也可以导入.psd1 文件,而不是.psm1。在这种情况下,它显然会拾取这两个文件 --- 因为 .psd1 文件确实(隐式或显式)指定要导入哪个模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多