Add-Type -AssemblyName
。但是,我需要的DLL并不总是在计算机或GAC上。例如,我可能想要一个快速的脚本,使用Dapper查询数据库。在这些情况下,我一直在字面上复制DLL以及ps1
文件。我想知道这是否是常见的/好主意,是否有现有的扩展可以加载NuGet包,在全局或本地文件夹中存储它们并自动调用Add-Type -AssemblyName
。这与在Node.js或Python中分别使用npm
或pip
非常相似。
更新
我进行了一些研究,发现较旧版本的PowerShell中没有内置功能。我尝试使用nuget.exe
从头开始编写一个自动化程序,取得了一些进展。
&"$(Get-Location)/nuget.exe" install $packageName -Version $version -OutputDirectory "$(Get-Location)/packages" -NoCache -NoInteractive
这将在当前文件夹的“packages”文件夹下下载给定包/版本以及其依赖项。但是,它似乎会下载每个框架版本,并没有明显的方法告诉您要在给定环境中使用哪个版本。
否则,您可以只需循环遍历结果并调用Add-Type:Get-ChildItem .\packages\ -Recurse -Filter "*.dll" | % {
try
{
Add-Type -Path $_.FullName
}
catch [System.Exception]
{
}
}
我尝试使用project.json
文件和restore
命令来控制框架版本,但是没有成功。这对我来说太过复杂。
我将尝试@crownedjitter建议的使用PowerShell 5。
更新
通过@crownedjitter的建议,我最终能够在NuGet中注册PackageManagement模块(请参见下面的评论)。使用以下命令,我能够重现上述Nuget.exe
命令的操作:
Install-Package Dapper -Destination packages
显然,这段代码要短得多。问题在于它有相同的限制;它会使每个框架版本的包都被拉下来。如果包括 .NET Core,它会将大量的 .NET Core 框架一起带下!似乎没有办法指定目标框架(即 .NET 4.5.1 或以下)。
我想知道是否有一种方法可以根据 PowerShell 的当前 $PSVersionTable.CLRVersion
字段确定要从哪些 NuGet 包文件夹中加载 DLL。
Add-Type -Path
? - user4003407