在 PowerShell 脚本中导入依赖 DLL

Posted

技术标签:

【中文标题】在 PowerShell 脚本中导入依赖 DLL【英文标题】:Importing Dependent DLLs in a PowerShell Script 【发布时间】:2022-01-12 09:12:50 【问题描述】:

问题陈述:

的最佳方式。

说明:

我有一个 DLL,即 a.dll,它对 b.dll、c.dll、...有近 10 个依赖项。 DLL 不存在于它引发错误的同一目录中。我只有 Nuget 包中的 DLL。包像往常一样会在

├── 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、控制台应用程序、Web 应用程序等无关。

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

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

【讨论】:

解决了我的问题。非常感谢!

以上是关于在 PowerShell 脚本中导入依赖 DLL的主要内容,如果未能解决你的问题,请参考以下文章

在 IntelliJ IDEA 中导入 Maven 依赖项

无法在脚本中导入 django.apps

在maven项目中导入外部jar而不创建依赖项[重复]

无法在 Eclipse 中导入 Maven 依赖项?尝试了一切

在 Hadoop MapReduce 脚本中导入外部库

如何在 python 脚本中导入绘图图?