Приложение, ссылающееся на Microsoft.SqlServer.Smo, требует, чтобы на Target Machine были включены дополнительные сборки? - PullRequest
5 голосов
/ 17 сентября 2008

У меня есть небольшое приложение, которое ссылается на сборку Microsoft.SqlServer.Smo (поэтому я могу отобразить пользователю список серверов и баз данных, к которым они могут подключиться).

Мое приложение изначально ссылалось на Microsoft.SqlServer.Smo и Microsoft.SqlServer.ConnectionInfo. На моем устройстве разработчика все работало как положено.

Когда я установил приложение на тестовом компьютере, я получил System.IO.FileNotFoundException . Детали сообщения включали следующее: Не удалось загрузить файл или сборку Microsoft.SqlServer.SmoEnum

Я в итоге решил проблему, сославшись на следующие сборки в дополнение к упомянутым выше:

  • Microsoft.SqlServer.SmoEnum
  • Microsoft.SqlServer.SqlEnum
  • Microsoft.SqlServer.BatchParser
  • Microsoft.SqlServer.Replication

Может ли кто-нибудь подтвердить, что мне действительно нужно включить каждую из этих дополнительных сборок в мое приложение (и, следовательно, установить их на компьютерах пользователей), даже если приложение прекрасно работает на моем компьютере для разработки без ссылки на них?

Ответы [ 4 ]

4 голосов
/ 13 мая 2014

Вам необходимо установить два файла MSI на целевой машине, а именно:

1) SQLSysClrTypes.msi [этот нужен для C # -> SMO GAC]

2) SharedManagementObjects.msi

Для SQL Server 2014 вы можете загрузить эти здесь .

Кроме того, вы должны убедиться, что версия верна. Эти два файла можно найти с небольшим поиском. Таким образом, вы ничего не копируете в локальную систему, и они будут разрешены в GAC.

Я знаю, что это старый вопрос, но ответы не были удовлетворительными.

2 голосов
/ 17 сентября 2008

Да, они должны быть включены. На компьютере разработчика, вероятно, установлен SQL Server, который помещает эти сборки в глобальный кэш сборок. Всякий раз, когда вы строите, Visual Studio просто извлекает их из GAC. Также предполагается, что GAC любого компьютера, на котором он будет развернут, также будет иметь эти файлы. Если нет, выдается исключение FileNotFound.

0 голосов
/ 27 апреля 2011

Для меня этот ответ оказался неверным. Я добавил вышеупомянутые ссылки, но без разрешения. В конце концов я обнаружил, что мне нужна только ссылка:

Microsoft.SqlServer.Smo

... и следующее разрешение:

Я получаю сообщение об ошибке «Попытка загрузить программу с неверным форматом» в проекте репликации SQL Server

Подводя итог, мне нужно было включить IIS 6 для включения 32-битного приложения в пуле приложений IIS. Это потому, что у меня была Win 7 x64, но я установил SQL x86. Жаль, что сообщение об ошибке не может быть более конкретным, да?

0 голосов
/ 17 сентября 2008

Поскольку JIT связывается с внешними сборками во время выполнения, на этот вопрос невозможно ответить, не проанализировав свой код и не посмотрев, что вы называете, и, в свою очередь, что эти вызовы вызывают и т. Д.

Если вы хотите проанализировать это самостоятельно, вам лучше всего сослаться только на ту сборку, которая вам нужна, а затем извлечь из исключений и внутренних исключений то, что произошло.

Еще одна вещь, на которую вы должны обратить внимание, это то, почему четыре упомянутые вами сборки отсутствуют в GAC. Похоже, что они должны быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...