Не удалось загрузить файл или сборку - PullRequest
0 голосов
/ 06 ноября 2019

Что я пытаюсь сделать:

Я пишу встроенный 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 #.

Будем весьма благодарны за любые мысли о том, как устранить эту ошибку!

...