Импорт зависимых библиотек DLL в сценарии PowerShell

#c# #powershell #dll #nuget

#c# #powershell #dll #нугет

Вопрос:

Постановка проблемы:

Оптимальный способ импорта зависимых библиотек DLL в сценарии PowerShell.

Объяснение:

У меня есть библиотека DLL, а именно a.dll который имеет почти 10 зависимостей от b.dll, c.dll,…. Когда я импортирую a.dll из пакета Nuget A в сценарии PowerShell, затем, поскольку зависимые библиотеки DLL отсутствуют в том же каталоге, он выдает ошибку. У меня есть только библиотеки DLL в пакетах Nuget. Пакеты, как обычно, будут находиться в

 ├── Nuget-A │ ├── 1.0 | | |── a.dll │  ├── Nuget-B │ ├── 2.0 | | |── b.dll  

В сценарии PoweShell я импортирую a.dll,

Импорт-Модуль «Nuget-A/1.0/a.dll»

Это выдает мне ошибку, поэтому я делаю следующее

Импорт-Модуль «Nuget-B/2.0/b.dll»
Импорт-Модуль «Nuget-A/1.0/a.dll»

Точно так же я должен сделать для 10 библиотек DLL.

Каков оптимальный способ обработки сценария? Я также открыт для любых других подходов

Ответ №1:

У меня нет большого опыта работы с PowerShell, но я ожидаю, что если все сборки находились в одном каталоге , то при импорте a.dll он автоматически найдет ссылки, такие как b.dll . Вот как это .Среда выполнения NET более или менее загружает сборки, независимо от PowerShell, консольного приложения, веб — приложения и так далее.

Поэтому вместо создания пакета A , содержащего только a.dll пакет и зависимость от пакета B , пусть пакет A не имеет никаких зависимостей и содержит все 10 библиотек DLL в нем.

Есть несколько способов добиться этого. Один из них заключается в повторном использовании csproj PackAsTool . Он публикует проект (используя эквивалент dotnet publish ), а затем упаковывает все в папку публикации. Поскольку он предназначен для упаковки консольных приложений , чтобы их можно было позже установить с помощью dotnet tool install , вам, возможно, придется немного поработать, чтобы заставить его работать. Другой способ-бежать dotnet publish , а затем получить nuget.exe от nuget.org/downloads, и компакт-диск в каталог публикации запустите nuget.exe spec , чтобы создать .nuspec файл шаблона, отредактируйте этот nuspec со всеми необходимыми метаданными, а затем запустите nuget.exe pack . Он упакует все файлы в каталоге в nupkg. Есть и другие способы, например, попробуйте nugetizer, инструмент, созданный сообществом, но этот вопрос касается того, как решить проблему загрузки сборок, на которые ссылаются, а не как их упаковать, поэтому я оставлю это на этом. Я хочу сказать, что когда у вас есть пакет, содержащий командлет PowerShell, вам не нужно беспокоиться о загрузке всех зависимостей в сценарии/среде powershell с помощью пакета, поэтому убедитесь, что пакет «самодостаточен». Это переносит нагрузку с времени потребления на время упаковки, но во время упаковки все зависимости известны, поэтому эту проблему легче решить.

Комментарии:

1. Решил мою проблему. Большое спасибо!