预加载模块文件所需的程序集:清单不起作用

问题描述

给予

UserMessage_class_script.ps1

Using module ".\UserMessage_class_script.psm1"
$processIcon = [System.Drawing.Icon]::ExtractAssociatedIcon($(Get-Process -id:$PID | Select-Object -expandProperty:path))
$message = [PxMessage]::GetInstance($processIcon)
$message.SendMessage('Title',"$(Get-Date)",'Info')

UserMessage_class_script.psm1

class PxMessage {
    static [PxMessage] $instance
    static [Windows.Forms.NotifyIcon]$balloon
    static [System.Drawing.icon]$defaultIcon

    static [PxMessage] GetInstance($processIcon) {
        if ([PxMessage]::instance -eq $null) {
            [PxMessage]::instance = [PxMessage]::new()
            [PxMessage]::balloon = [Windows.Forms.NotifyIcon]::new()
            [PxMessage]::defaultIcon = $processIcon
        }

        return [PxMessage]::instance
    }

    [Void] SendMessage ([String]$title,[String]$message,[String]$messageIcon) {
        [PxMessage]::balloon.icon = [PxMessage]::defaultIcon
        [PxMessage]::balloon.balloonTipTitle = $title
        [PxMessage]::balloon.balloonTipText = $message
        [PxMessage]::balloon.balloonTipIcon = $messageIcon
        [PxMessage]::balloon.visible = $true 
        [PxMessage]::balloon.ShowBalloonTip(0)
        [PxMessage]::balloon.Dispose
    }
}

UserMessage_class_script.psd1

@{
    RootModule = 'UserMessage_class_script.psm1'
    GUID = '0e53745b-0b05-4bd3-8af2-f1595bca0167'
    RequiredAssemblies = @('System.Drawing','System.Windows.Forms')
}

然后从快捷方式启动UserMessage_class_script.ps1,而不是在ISE中加载和运行它,我的理解是PSD1文件应预加载所需的程序集,以便在Using module将PSM1文件加载到PS1中的情况下在PSM1文件中,该类的类型属性不会引发错误。但是,那不是我所看到的。两个属性行均引发Unable to find type错误。

现在,如果我添加

using assembly System.Drawing
using assembly System.Windows.Forms

在PS1文件中的“使用模块”行之前,所有步骤均有效。哪种方式有意义,当加载PSM1文件并编译类时,就可以使用程序集,并且类型可用。 here对此进行了很好的解释。

但是这种方法使PSM1文件依赖于准备PS1文件中的环境,我认为我不需要这样做。因此,我认为我在使用清单文件时做错了什么,尽管在我的一生中我无法弄清楚是什么。

如果需要的话,主脚本中的两条Using汇编行确实不是问题。但是,如果可以使PSM1(或带有清单的PSM1)自立,那会更好。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)