相关疑难解决方法(0)

从NuGet包加载程序集

有时在我的PowerShell脚本中,我需要使用访问特定的DLL Add-Type -AssemblyName.但是,我需要的DLL并不总是在机器上或GAC中.例如,我可能想要一个使用Dapper查询数据库的快速脚本.在这些情况下,我一直在将DLL与ps1文件一起复制.我想知道这是不是常见/一个好主意,是否有现有的扩展会加载NuGet包,然后存储在全局或本地文件夹中并Add-Type -AssemblyName自动调用.

它分别与使用npmpip在Node.js或Python中很相似.

更新

我做了一些研究,并没有内置到旧版本的PowerShell.我试图从头开始编写一个使用的nuget.exe

&"$(Get-Location)/nuget.exe" install $packageName -Version $version -OutputDirectory "$(Get-Location)/packages" -NoCache -NoInteractive
Run Code Online (Sandbox Code Playgroud)

这将下载当前文件夹中"packages"文件夹下的给定包/版本及其任何依赖项.但是,它看起来像下载每个框架版本,没有明显的方法来告诉您哪个用于您的给定环境.

否则,您可以循环遍历结果并调用Add-Type:

Get-ChildItem .\packages\ -Recurse -Filter "*.dll" | % {
    try
    {
        Add-Type -Path $_.FullName
    }
    catch [System.Exception]
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用restore命令使用project.json文件来查看我是否可以控制框架版本而没有运气.这对我来说太过于苛刻了.

我将查看@ crownedjitter关于使用PowerShell 5的建议.

更新

使用@ crownedjitter的建议,我最终能够使用NuGet注册PackageManagement模块(请参阅下面的评论).使用以下命令,我能够重现Nuget.exe上面的命令正在执行的操作:

Install-Package Dapper -Destination packages
Run Code Online (Sandbox Code Playgroud)

显然,这要短得多.问题是它有同样的局限性; 它降低了包的每个框架版本.如果这包括.NET核心,它会带来很多.NET核心框架!似乎没有办法指定目标框架(又名.NET 4.5.1或更低版本).

Install-Package抓取所有.NET框架的依赖关系

我想知道是否有办法根据PowerShell的当前$PSVersionTable.CLRVersion字段确定从哪个NuGet包文件夹加载DLL .

powershell nuget-package powershell-4.0

14
推荐指数
2
解决办法
5203
查看次数

标签 统计

nuget-package ×1

powershell ×1

powershell-4.0 ×1