【问题标题】:Commands aren't exported when importing a PowerShell Binary Module on a Linux container在 Linux 容器上导入 PowerShell 二进制模块时不会导出命令
【发布时间】:2019-12-11 19:17:39
【问题描述】:

我在 .NET Core 中创建了一个 PowerShell 二进制模块(TargetFramework 是 netstandard2.0)。当我在 Windows 机器上使用 Import-Module 时,模块导入成功,我可以调用 cmdlet。当我在 Linux 容器上执行相同操作时(我使用的是官方的 Microsoft PowerShell 容器映像 - mcr.microsoft.com/powershell:ubuntu-18.04),模块导入时不会出错,但我无法调用 cmdlet。如果我运行 Get-Module,Linux 容器上没有列出导出命令,但我的 Windows 机器上有。

PowerShell 模块的项目是使用dotnet new powershell 初始化的。我尝试添加一个 psd1 清单文件,我还初始化了一个新项目并重复了上述步骤。使用 dotnet new 创建的基础项目也会出现同样的问题。

我正在运行 dotnet 版本 2.2.103。运行 dotnet new powershell 会创建一个带有如下 csproj 文件的项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AssemblyName>demo_psmodule</AssemblyName>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="PowerShellStandard.Library" Version="5.1.0-preview-06">
      <PrivateAssets>All</PrivateAssets>
    </PackageReference>
  </ItemGroup>

</Project>

示例项目有一个类:

    [Cmdlet(VerbsDiagnostic.Test,"SampleCmdlet")]
    [OutputType(typeof(FavoriteStuff))]
    public class TestSampleCmdletCommand : PSCmdlet
    {
       // cmdlet parameters and code
    }

我希望该模块能够像在 Windows 机器上那样在 linux 容器上导出 cmdlet。我需要改变什么来实现这一点?

更新 问题在于我用来构建容器的 dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /src
COPY [ "demo-psmodule.csproj", "src/" ]
RUN dotnet restore "src/demo-psmodule.csproj"
COPY . .
RUN dotnet publish "src/demo-psmodule.csproj" -c Release -o /app/demo_psmodule

FROM mcr.microsoft.com/powershell:ubuntu-18.04 AS app
WORKDIR /app
COPY --from=build /app .

【问题讨论】:

    标签: c# linux powershell docker .net-core


    【解决方案1】:

    dockerfile 没有将 csproj 文件复制到与源代码文件相同的位置。这构建成功,但产生了一个空的 dll。导入 PowerShell 也没有任何错误,但显然不包含要导出的 cmdlet。更正(和简化)的 dockerfile:

    FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
    WORKDIR /src
    COPY demo-psmodule.csproj .
    RUN dotnet restore demo-psmodule.csproj
    COPY . .
    RUN dotnet publish demo-psmodule.csproj -c Release -o /app/demo_psmodule
    
    FROM mcr.microsoft.com/powershell:ubuntu-18.04 AS app
    WORKDIR /app
    COPY --from=build /app .
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      相关资源
      最近更新 更多