问题陈述:
在PowerShell脚本中导入依赖DLL的最佳方法。
解释:
我有一个DLL,即a.dll,它对b.dll、c.dll、.有几乎10个依赖项。当我在一个a.dll脚本中从Nuget包A导入PowerShell时,由于依赖的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/2.0/b.dll”
进口-模块"Nuget-A/1.0/a.dll“
同样,对于10个DLL,我也必须这样做。
处理场景的最佳方式是什么?我也愿意接受任何其他方法。
发布于 2021-12-07 13:50:10
我对PowerShell不是很熟悉,但是我希望如果所有的程序集都在同一个目录中,那么当您导入a.dll
时,它会自动找到引用,比如b.dll
。这就是.NET运行时多少加载程序集的方式,而不管PowerShell、控制台应用程序、web应用程序等等。
因此,与其创建只包含a.dll
和包B
的依赖项的包A
,不如让包A
没有任何依赖项,并包含其中的所有10个dll。
要做到这一点,有几种方法。一个是重用csproj的PackAsTool
。它发布项目(使用等效的dotnet publish
),然后打包发布文件夹中的所有内容。因为它是为打包控制台应用程序而设计的,所以以后可以通过dotnet tool install
安装这些应用程序,因此您可能需要进行一些黑客操作才能使其正常工作。另一种方法是运行dotnet publish
,然后从nuget.org/ nuget.exe获取nuget.exe,然后到发布目录运行nuget.exe spec
创建一个模板.nuspec
文件,用您想要的所有元数据编辑nuspec,然后运行nuget.exe pack
。它将将目录中的所有文件打包到nupkg中。还有其他的方法,例如,尝试一个社区创建的工具nugetizer,但是这个问题是关于如何解决引用的程序集加载,而不是如何打包,所以我将保留它。我的观点是,当您有一个包含PowerShell cmdlet的包时,您不需要担心使用这个包加载powershell脚本/环境中的所有依赖项,所以确保包是“自包含的”。它将负担从消耗时间转移到打包时间,但在打包时,所有的依赖项都是已知的,因此这是一个更容易解决的问题。
https://stackoverflow.com/questions/70257718
复制相似问题