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

318

Точная ошибка заключается в следующем

Не удалось загрузить файл или сборку «Microsoft.SqlServer.Replication, версия = 9.0.242.0, культура = нейтральная, PublicKeyToken = 89845dcd8080cc91» или одна из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.

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

Лысый
источник

Ответы:

405

Ответ на балды ниже является правильным, но также , возможно , потребуется включить 32-разрядные приложения в вашем AppPool.

Источник: http://www.alexjamesbrown.com/uncategorized/could-not-load-file-or-assembly-chilkatdotnet2-or-one-of-its-dependencies-an-attempt-was-made-to-load- а-программа-с-с-некорректного формата /

При настройке приложения для запуска на моем локальном компьютере (под управлением Vista 64bit) я столкнулся с этой ошибкой:

Не удалось загрузить файл или сборку ChilkatDotNet2или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.

Очевидно, что приложение использует компоненты ChilKat , но может показаться, что используемая нами версия является только 32-битной версией.

Чтобы устранить эту ошибку, я настроил свой пул приложений в IIS, чтобы разрешить 32-битные приложения. Откройте диспетчер IIS, щелкните правой кнопкой мыши пул приложений и выберите «Дополнительные параметры» (см. Ниже).

введите описание изображения здесь

Затем установите «Включить 32-разрядные приложения» в True.

введите описание изображения здесь

Все сделано!

bboyle1234
источник
Приведет ли это к тому, что весь пул приложений будет работать как 32-разрядный, а не полный 64-разрядный? Было бы лучше перекомпилировать зависимость для 64-битных / всех платформ? У меня возникла эта проблема из-за NFOP, но так как это открытый исходный код, я мог бы перекомпилировать ее.
jamiebarrow
2
Ссылка не работает, но вашего объяснения было достаточно, чтобы решить мою проблему. +1
Андрей Шепард
Ссылка с инструкциями о том, как включить 32-разрядные приложения: blogs.msdn.com/b/rakkimk/archive/2007/11/03/…
Brandon S
15
Возможно, стоит отметить, что это решение AppPool применимо только к приложениям ASP.NET - может привести к путанице в некоторых разработчиках, которые никогда не использовали / не настраивали ASP.NET или IIS.
Галактор
не исправляет это в IIS7 только в IIS7.5
FlavorScape
120

Я нашел решение. Я недавно обновил свою машину до Windows 2008 Server 64-bit. Пространство имен SqlServer.Replication было написано для 32-разрядных платформ. Все, что мне нужно было сделать, чтобы запустить его снова, это установить целевую платформу в свойствах сборки проекта на X86.

Лысый
источник
У меня эта проблема с DLL, но в моем Project> HDP Properties ... нет вкладки "Build" (вроде бы все, но не это). На вкладках «Компиляция» и «Отладка» есть раскрывающийся список «Платформа», но единственным элементом раскрывающегося списка в обоих случаях является «Активный (любой ЦП)».
Б. Клэй Шеннон
Я случайно столкнулся с обратной проблемой. У меня все работало в 64-битном режиме, и моей целью сборки был Any CPU. Когда я изменил это на 64-битное, это работало совершенно нормально :)
Мадхурья Ганди
87

Измените значение Platform Target на странице свойств вашего веб-проекта на Any CPU.

введите описание изображения здесь

p.campbell
источник
К сожалению, не имеет никакого эффекта.
Джонатан
4
Я был неправ - это сработало после того, как я избавился от всех своих папок 'bin'. Спасибо!
Джонатан
Также исправлена ​​моя проблема, но только после выполнения этого для КАЖДОГО проекта в моем решении. Упомянутые шаги предназначены для проектов C #. Для проектов VB.NET измените «Свойства проекта»> «Компиляция»> «Дополнительные параметры компиляции»> «Целевой процессор» на «AnyCPU»
Франсуа Бота,
6
В моем случае проект уже был нацелен на «Любой процессор». Но я использую 64-битную Windows и пытаюсь DllImport драйвер старой школы. Конкретно изменение цели на x86 исправило это для меня.
bsegraves
В моем случае я хотел работать под x64. Это не сработало. После изменения всех рекомендаций мне также пришлось сменить «Bitness» в Интернете на x64
SKCS Kamal
52

Перейдите в IIS -> Пул приложений -> Расширенные настройки -> Включить 32-разрядные приложения.

Harpal
источник
Clay, какую версию IIS вы используете?
Harpal
23

У нас недавно возникла проблема при попытке запустить код из Visual Studio. В этом случае вам нужно выполнить
ИНСТРУМЕНТЫ> ОПЦИИ> Проекты и решения> ВЕБ-ПРОЕКТЫ и установить флажок «Использовать 64-разрядную версию IIS Express для веб-сайтов и проектов».

Джастин
источник
1
Это то, что в конечном итоге сработало для меня. Специально для людей, пытающихся отлаживать Web API с помощью библиотек Service Fabric !!! Если вы используете какие-либо библиотеки Service Fabric DLL в своем проекте, убедитесь, что вы используете вышеуказанное решение.
Крис Датра
Это единственное решение, которое сработало для меня. Спасибо. : D
Джереми Стайерс
Работа для меня тоже!
Cù Đức Hiếu
11

Для тех, кто получает эту ошибку в проекте ASP.NET MVC 3 , в самой Visual Studio:

В приложении ASP.NET MVC 3, над которым я работаю, я попытался добавить ссылку на Microsoft.SqlServer.BatchParser в проект, чтобы решить проблему, отсутствующую на сервере развертывания. (Наше приложение использует SMO; правильным решением было установить собственный клиент SQL Server и несколько других вещей на сервере развертывания.)

Даже после того, как я удалил ссылку на BatchParser, я продолжал получать сообщение об ошибке «Была сделана попытка ...», ссылаясь на библиотеку BatchParser, на каждой открываемой мной странице ASP.NET MVC 3, и за этой ошибкой следовали десятки разборов страниц. ошибки.

Если это произойдет с вами, выполните поиск файлов и посмотрите, находится ли DLL в одной из папок \ bin вашего проекта. Даже если вы делаете перестройку, Visual Studio не обязательно очищает все во всех ваших папках \ bin. Когда я удалил DLL из корзины и снова собрал ее, ошибка исчезла.

Райан Ланди
источник
Я только что сделал перестройку, и проблема исчезла без необходимости вручную удалять DLL. Спасибо!
Тревор
4

У меня было это в приложении MVC5 в Windows 10 против IIS Express. Мое решение было следующим:

  • Инструменты =>
    • Варианты =>
      • Проекты и решения =>
        • Веб-проекты =>
          • Используйте 64-битную версию IIS Express для веб-сайтов и проектов
krillgar
источник
3

изменить его на 32-битный (правда), он работает

если вы получите эту длину не может быть меньше нуля. Имя параметра: проблема с длиной в настройке сервера iis. Просто измените строку подключения в файле web.config, например, имя сервера sql и имя сервера, и перезапустите iis, затем попытайтесь загрузить страницу, на которой он работает.

Munwar Shaiik
источник
2

Если при публикации в Visual Studio 2012 происходит ошибка, снимите флажок «Прокомпилировать во время публикации» в мастере публикации.

Снимите флажок «Прекомпилировать во время публикации»

SushiGuy
источник
0

в приложении Windows Form я делаю это, щелкнув правой кнопкой мыши на Project-> Properties-> Build-> Check Prefer 32-bit. Спасибо всем

Амирхосейн Яри
источник
0
  1. Удалите каталог временных тестов, расположенный здесь C: \ Users (Пользователь) \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \

  2. Установите все проекты на x64 в Visual Studio

  3. Установите архитектуру процессора по умолчанию на x64 (Test / TestSettings / Архитектура процессора по умолчанию).

Обязательно очистите сборку файла решения. Надеюсь, это поможет!

Мадхурья Ганди
источник
0

Изменение Target Framework в свойствах проекта с .NET Framework 4.7.1 до 4.6.2 работало для меня.

sussexrick
источник