在 PowerShell 脚本中导入依赖 DLL

Importing Dependent DLLs in a PowerShell Script

问题陈述:

在 PowerShell 脚本中导入依赖 DLL 的最佳方式。

解释:

我有一个 DLL,即 a.dll,它几乎有 10 个依赖于 b.dll、c.dll、....当我从 Nuget 导入 a.dll PowerShell 脚本中的包 A 然后由于从属 DLL 不存在于同一目录中,因此它会引发错误。我只有 Nuget 包中的 DLL。像往常一样的包裹将在

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

在 PoweShell 脚本中,我将导入 a.dll、

Import-Module "Nuget-A/1.0/a.dll"

这会引发错误,所以我执行以下操作

Import-Module "Nuget-B/2.0/b.dll"
Import-Module "Nuget-A/1.0/a.dll"

我必须以同样的方式处理 10 个 DLL。

处理该场景的最佳方式是什么?我也对任何其他方法持开放态度

我对 PowerShell 不是很熟悉,但我希望如果所有程序集都在同一个目录中,那么当您导入 a.dll 时,它会自动找到引用,例如 [=11] =].这就是 .NET 运行time 加载程序集的方式,或多或少,与 PowerShell、控制台应用程序、Web 应用程序等无关。

因此,与其创建仅包含 a.dll 和对包 B 的依赖项的包 A,不如让包 A 没有任何依赖项,并包含其中包含所有 10 个 dll。

有几种方法可以实现。一种是重用csproj的PackAsTool。它发布项目(使用 dotnet publish 的等效项),然后将所有内容打包到发布文件夹中。由于它旨在打包控制台应用程序,以便稍后可以通过 dotnet tool install 安装它们,您可能需要进行一些黑客操作才能使其正常工作。另一种方式是运行dotnet publish,然后从nuget.nuget.exe获取nuget.exe。org/downloads,cd到publish目录运行nuget.exe spec创建一个模板 .nuspec 文件,使用您想要的所有元数据编辑该 nuspec,然后 运行 nuget.exe pack。它会将目录中的所有文件打包成一个 nupkg。还有其他方法,例如尝试 nugetizer,一个社区创建的工具,但这个问题是关于如何解决引用的程序集加载,而不是如何打包,所以我将保留它。我的观点是,当您有一个包含 PowerShell cmdlet 的程序包时,您不必担心使用该程序包加载 powershell script/environvment 中的所有依赖项,因此请确保该程序包是“自包含的”。它将负担从消耗时间转移到打包时间,但是在打包时所有的依赖关系都是已知的,所以这个问题更容易解决。