Что я пытаюсь сделать:
Я пишу встроенный C # в powershell (из-за ограничений проекта).
Япытаюсь подключиться к базе данных, используя объекты SMO с конечной целью вернуть сценарий создания таблицы для существующей таблицы.
В Powershell уже установлены dba-tools, поэтому я использую их dll (они работают при использованиикомандлеты в обычном PowerShell)
Ошибка:
"Исключение вызывает" Main "с аргументом (ами)" 0 ":" Не удалось загрузить файл или сборку "Microsoft.SqlServer.ConnectionInfo, версия = 15.100.0.0, культура = нейтральная, PublicKeyToken = 89845dcd8080cc91 'или одна из ее зависимостей. Система не может найти указанный файл. "
Код:
Add-Type -Language CSharp -ReferencedAssemblies @(
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll"
,"C:\Program Files\WindowsPowerShell\Modules\dbatools\1.0.21\bin\smo\Microsoft.SqlServer.Smo.dll"
,"C:\Program Files\WindowsPowerShell\Modules\dbatools\1.0.21\bin\smo\Microsoft.SqlServer.SmoExtended.dll"
,"C:\Program Files\WindowsPowerShell\Modules\dbatools\1.0.21\bin\smo\Microsoft.SqlServer.Management.Sdk.Sfc.dll"
,"C:\Program Files\WindowsPowerShell\Modules\dbatools\1.0.21\bin\smo\Microsoft.SqlServer.ConnectionInfo.dll" #Microsoft.SqlServer.Management.Common
,"C:\Program Files\WindowsPowerShell\Modules\dbatools\1.0.21\bin\smo\Microsoft.SqlServer.SqlEnum.dll"
) @"
using System;
using System.Diagnostics;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
namespace Nick {
public class Test {
public void Main(){
FileVersionInfo vi = FileVersionInfo.GetVersionInfo(@"C:\Program Files\WindowsPowerShell\Modules\dbatools\1.0.21\bin\smo\Microsoft.SqlServer.ConnectionInfo.dll");
Console.WriteLine("Microsoft.SqlServer.ConnectionInfo.dll {0}",vi.FileVersion);
ServerConnection serverconnection = new ServerConnection();
}
}
}
"@
$Test = New-Object -TypeName Nick.Test
[UInt32]$ReturnValue = $Test.Main()
Я распечатал версию dll:
Microsoft.SqlServer.ConnectionInfo.dll 15.0.18118.0 ((SSMS_Rel) .190420-0019)
Он отличается от 15.100.0.0, который пытается загрузить, но не знает, где искать эту dll. Другие потокиЯ прочитал, предположить, что это может быть проблема совместимости с 32-битной / 64-битной. Я пытался работать в 32-битной PowerShell и 64-битной PowerShell.
Я не понимаю, почему они работают при запускеКомандлеты dba-tools в powershell, но не при использовании их со скриптом C #.
Будем весьма благодарны за любые мысли о том, как устранить эту ошибку!