Проект C # со ссылкой на неуправляемую стороннюю сборку прекрасно работает в Debug, но не работает в конфигурации выпуска - PullRequest
1 голос
/ 21 ноября 2011

У меня есть проект на C #, который ссылается на неуправляемую стороннюю DLL (которая ChilkatDotNet2.dll , но, похоже, это не имеет значения). Сторонняя DLL поставляется в 2 версиях, x86 и x64. Проект ссылается на версию x86 - processorArchitecture=x86 в соответствующем элементе <Reference>. Он прекрасно работает как в Debug | Any CPU, так и в Release | Any CPU.

Теперь я меняю ссылку на x64 версию сторонней DLL - processorArchitecture=AMD64. (Не спрашивайте меня почему, пожалуйста :)). Отладка | Любой процессор снова собирается нормально. Но Release | Any CPU завершается с ошибкой: An attempt was made to load an assembly with an incorrect format: ChilkatDotNet2.dll.

В чем может быть причина? Я думаю, это потому, что сама VS работает как 32-битный процесс (верно?), Но почему она хорошо работает в Debug?

Ответы [ 3 ]

2 голосов
/ 21 ноября 2011

Вероятно, неверный тип платформы в вашей конфигурации выпуска.Если вы строго ссылаетесь на сборки x86 / AMD64, тогда ваша сборка не может быть ЛЮБОЙ ЦП и должна зависеть от платформы

1 голос
/ 21 ноября 2011

Я удивлен, что это ошибка времени компиляции. По моему опыту эти проблемы проявляются как BadImageFormatException во время выполнения. Хотя вашей платформой решения является Любой ЦП, я бы проверил целевую платформу ссылочного проекта, чтобы убедиться, что она также установлена ​​на Любой ЦП. Также по умолчанию Visual Studio будет создавать проекты приложений с использованием конфигурации x86, а не любого процессора. Таким образом, даже если для ссылающегося проекта установлено значение «Любой ЦП», проект входного приложения в конечном итоге является решающим фактором того, как будут ссылаться на любые проекты, нацеленные на ЦП, JIT.

0 голосов
/ 10 февраля 2012

Что ж, проблема, похоже, скрыта в том, что проект был обновлен с более старых версий VS (я полагаю, начиная с 2005 года).Я заново создал его, добавил все необходимые вещи, и это работает!Более того, он стал ИДЕНТИЧНЫМ для плохого, и это сводит меня с ума: один работает, другой нет.

Итак, я сдался, так как "солнце встает? Ничего не трогай там".:) Спасибо всем, кто предложил варианты попробовать - я ценю ваши усилия (+1).

Принимая мой собственный ответ, чтобы пометить цепочку как завершенную, но не голосуйте - она ​​не содержит полезной информации ...

...