我需要用C#创建一个类库,我想把它包含在我正在编写的PowerShell模块中。我想通过调用一个方法来使用PowerShell中的DLL,就像你会做的那样,如下所示:
Add-Type -Path $($variableHash.RootPath + "\Deviceparserstandalone.dll")
[SkypeHelpers.CQTools.DeviceParser+Audio]::IsCertified($_.Caption)
以上是PowerShell导入DLL,然后使用IsCertified
方法(我假设它是一个方法)的示例。
这是我正在寻找的:
1.除了使用.NET核心类库模板创建一个新的Visual Studio项目、导入库所需的依赖项、然后将代码编译为DLL之外,我还需要做什么特殊的事情吗?
1.如何公开一些方法供消费应用程序使用(在本例中为PowerShell),同时保持其他方法“私有”?这是否类似于使用接口来描述消费应用程序可用的方法?如果是,这是否类似于为ASP.NET Core 2.x网站创建接口?
我们的目标是编写一个类库,PowerShell可以使用它为Windows 10创建一个吐司通知。我知道PowerShell库中有一些公共模块,但我试图了解它是如何从头开始构建的。
2条答案
按热度按时间4zcjmb1e1#
***主要更新:**适用于Powershell v7和. NET Core-请参阅下文 *
另一种选择是制作一个完整的PowerShell模块,下面是一个快速的方法:
1.创建新的类库解决方案
Microsoft.PowerShell.5.ReferenceAssemblies
中Microsoft.PowerShell.5.ReferenceAssemblies NuGet程序包仅与. NET Framework(v4.8之前)兼容,而与. NET核心不兼容。此问题可以通过针对
.NET Standard
进行更正(请参阅下面的"主要更新")1.创建一个简单的POCO类(仅作为演示),如下所示:
我的问候语类:
1.然后创建一个继承自
System.Management.Automation.Cmdlet
的Cmdlet类,该类带有几个特定于PowerShell的属性:我的答案是:
1.为了调试它,打开
Debug
选项卡项目属性并设置:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-noprofile -noexit -command "import-module .\yourProjectName.dll
现在按
F5
。PowerShell控制台将出现。由于您导入了模块,因此New-Greeting
cmdlet已加载。因此,这一切都将正常工作:导致:
但是,您的cmdlet是一个完整的PowerShell cmdlet,因此它可以进入管道。
将导致:
由于您在按
F5
并加载模块时启动PowerShell会话,因此您可以在调试器内的代码、单步等中设置断点。您可以获得所有正常的PowerShell优点。您可以使用
-Who
作为-ToWhom
的别名。-Greeting
参数被描述为必填项,因此如果您忘记了它,控制台将提示您。您也可以在POCO类上公开方法。例如,如果您将此方法添加到
GreetingClass
:您可以在PowerShell中执行此操作:
得到这个结果
我学到了很多这从:https://www.red-gate.com/simple-talk/dotnet/net-development/using-c-to-create-powershell-cmdlets-the-basics/
您可以从PowerShell自动获得基本的
Get-Help
帮助,但是如果您跟随Red-Gate演示(从上面的链接),您将了解如何从标准C#XML注解(从XmlDoc2CmdletDoc
NuGet包)获得丰富的Get-Help
帮助。在XmlDoc2CmdletDoc的GitHub自述文件页面上简要描述了XmlDoc2CmdletDoc的XML注解获取帮助功能:https://github.com/red-gate/XmlDoc2CmdletDoc
我使用了. NET标准程序集(即. NET核心兼容)和新的基于核心的PowerShell(PowerShell v7),在大多数情况下,上面的一切仍然有效。
.NET Standard 2.0
Microsoft.PowerShell.5.1.ReferenceAssemblies
中让它调试起来更加困难(因为. NET核心应用程序的古怪的新调试设置):
C:\Program Files\PowerShell\7\pwsh.exe
(或安装了PowerShell 7的位置)-noprofile -noexit -command "import-module .\yourProjectName.dll
)相同的. NET标准程序集现在可以同时用于传统的 * Windows PowerShell * 和新的PowerShell 7(我使用的是7.2.8版)。
如果我在这些说明中搞砸了什么,请在评论中让我知道。
0md85ypi2#
没有什么特别要做的。尝试创建一个名为
"Animal"
的新类库并添加以下代码:构建项目(以创建. dll)。您可以在
<projectLocation>\bin\<Release|Debug>
下找到. dll。现在打开powershell并输入以下代码: