Командлет PowerShell не находит сборку NuGet во время выполнения - PullRequest
0 голосов
/ 15 февраля 2019

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

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

  • System.Management.Автоматизация (для ядра) (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 Ответ

0 голосов
/ 15 февраля 2019

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

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

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

Результаты:

enter image description here

Вопросы:

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