2015-09-14 91 views
2

我正在寫一個PowerShell模塊,它取決於SQL Server中的SMO程序集。 (我唯一需要參考的是Microsoft.SqlServer.Smo.dll)如何在PowerShell模塊中引用GAC中的程序集?

當我一直在開發模塊。我剛把我需要組裝的副本,並在我的清單文件中引用它類似於此:

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

SMO對象是否可以在GAC中使用,或者您是否可以安裝它們? –

+0

@RichRousseau,我試圖看看將模塊與.dll文件綁定是否合法,否則是的,他們必須先安裝。 – Jake

回答

3

除非您打算將SMO程序集部署爲專用程序集,否則我不會建議從直接引用加載它們。

要從GAC加載,使用添加型cmdlet與完全合格的組件名稱...

Add-Type -AssemblyName "Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 

相關: How do I use Add-Type to load Microsoft.Web.Deployment?

+0

你能解釋一下'private assemblies'是什麼意思嗎? – Jake

+0

任何程序集都不在GAC中,因此您隨應用程序或任何第三方程序集構建和部署的任何自定義程序集都未在GAC中註冊,您將與您的應用程序一起部署。 –

+0

從技術上講,我需要的程序集不是自定義的,因爲它們是Microsoft技術的一部分。如果我在法律上允許用模塊重新分配程序集,那麼每個人都很高興。我只是想找到一些能夠告訴我是否可以在不違反任何EULA的情況下做到這一點。 – Jake

0

您也可以只指定組件沒有版本info:

Add-Type -AssemblyName "System.Xml.Linq" 
相關問題