#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. Решил мою проблему. Большое спасибо!