我正在编写一个PowerShell模块,该模块取决于SQL Server中的SMO程序集。 (我唯一需要引用的是Microsoft.SqlServer.Smo.dll)
当我开发模块时。我刚刚收集了我需要的程序集的副本,并在我的清单文件中引用它,类似于:
RequiredAssemblies = @(
"$env:userprofile\Documents\WindowsPowerShell\Modules\Dependencies\Microsoft.SqlServer.Smo.dll"
)
我认为在生产环境中,您需要从标准位置引用程序集。我假设标准位置是GAC。
如果我从GAC引用程序集,我会得到这个,但是如果安装了新版本的程序集,它看起来可能会中断:
RequiredAssemblies = @(
'C:\WINDOWS\assembly\gac_msil\Microsoft.SqlServer.Smo\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll'
)
我也可以直接从SDK中引用程序集:
RequiredAssemblies = @(
'C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll'
)
我考虑过的另一个选项(但可能在某处破坏了EULA)是将程序集复制到服务器共享和引用,如下所示:
RequiredAssemblies = @(
'\\MyServer\PowerShellDependencies\Microsoft.SqlServer.Smo.dll'
)
但是我应该怎么做呢?
如果相关,则将安装此模块的所有计算机都是64位,并且将安装SMO库。此外,这不是一个公开的软件,它正在公司网络上部署。
更新:我已尝试仅在清单中指定程序集的名称,这似乎有效。
RequiredAssemblies = @(
'Microsoft.SqlServer.Smo.dll'
)
答案 0 :(得分:3)
除非您要将SMO程序集部署为私有程序集,否则我不建议从直接引用中加载它们。
要从GAC加载,请使用带有完全限定程序集名称的Add-Type cmdlet ...
Add-Type -AssemblyName "Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
答案 1 :(得分:0)
您也可以只指定没有版本信息的程序集:
Add-Type -AssemblyName "System.Xml.Linq"