Командлет PowerShell не находит сборку NuGet во время выполнения

Я создал библиотеку классов C#, которая будет содержать несколько командлетов PowerShell Core (6.1.2).

Проект включает в себя два пакета NuGet:

  • System.Management.Automation (для ядра) (6.1.2)
  • Oracle.ManagedDataAccess.Core (2.18.3)

New-Session Командлет:

using System;
using System.Management.Automation; 
using Oracle.ManagedDataAccess.Client; 
using Oracle.ManagedDataAccess.Types;

namespace PsOracleCore.Cmdlets
{
  [Cmdlet(VerbsCommon.New, "Session")]
  [OutputType(typeof(OracleConnection))] 
  public class NewSessionCmdlet : Cmdlet 
  {
    [Parameter(Position = 0)]
    [ValidateNotNullOrEmpty]
    public string Account { get; set; }

    [Parameter(Position = 1)]
    [ValidateNotNullOrEmpty] 
    public string Password { get; set; }

    [Parameter(Position = 2)]
    [ValidateNotNullOrEmpty] 
    public string DataSource { get; set; }

    protected override void ProcessRecord()
    {
      string connectionString = String.Format("User Id={0};Password={1};Data Source={2};",this.Account,this.Password,this.DataSource);

      OracleConnection connection = new OracleConnection();
      connection.ConnectionString = connectionString; connection.Open();
      WriteObject(connection);
    }

  } // class
} // namespace

Тесты xUnit (которые включают ссылку на проект) работают как положено.

После импорта модуля в pwsh сеанс (на OS X), я пытаюсь использовать командлет:

$ pwsh
PowerShell 6.1.2
Copyright (c) Microsoft Corporation. All rights reserved.

PS [project]/bin/Debug/netcoreapp2.1> import-module PsOracleCore
PS [project]/bin/Debug/netcoreapp2.1> new-session
Could not load file or assembly 'Oracle.ManagedDataAccess, Version=2.0.18.3, Culture=neutral, PublicKeyToken=89b483f429c47342'. The system cannot find the file specified.
At line:1 char:1
+ new-session
+ ~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], FileNotFoundException
+ FullyQualifiedErrorId : System.IO.FileNotFoundException

Я смог устранить ошибку, создав символическую ссылку на сборку в проекте. /bin/Debug/netcoreapp2.1 каталог:

$ ln -s ~/.nuget/packages/oracle.manageddataaccess.core/2.18.3/lib/netstandard2.0/Oracle.ManagedDataAccess.dll Oracle.ManagedDataAccess.dll

Чего-то не хватает в моем проекте?

Если я хочу распространить сборку Cmdlet, что мне нужно сделать, чтобы убедиться, что пакет NuGet правильно установлен и на него есть ссылки?

1 ответ

Мне нужно было добавить:

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

к моему проекту .csproj файл.

Результаты, достижения:

Вопросы:

  • Можно ли пометить выбранные сборки для копирования, а не для всех? Учитывая, что эта сборка является ссылкой через PowerShell, System.* одни кажутся ненужными.
  • Разве NuGet не должен обрабатывать установку зависимостей при использовании моей сборки, что сводит на нет необходимость распространять Oracle.ManagedDataAccess.dll сборка вручную?
Другие вопросы по тегам