Исключение было выдано целью вызова — была предпринята попытка загрузить программу с неправильным форматом. DbGeography

Прежде чем я что-то скажу - да, я прочитал все по этому вопросу, о сборке в режимах X86/X64 и так далее. Недавно я сменил компьютер и снова настроил свою среду. Код взят из службы отчетов в приложении Silverlight. Приложение Silverlight отлично строится и также нормально публикуется. Просто кажется, что где-то в разделе отчетов есть несколько небольших ошибок, которые, похоже, не хотят играть хорошо.

double Latitude = (double) parameters["GeofenceLatitude"];
double Longitude = (double) parameters["GeofenceLongitude"];
double Radius = (double) parameters["GeofenceRadius"];
DbGeography Geofence = GetPointFromLatLong(Latitude, Longitude);

Geofence = Geofence.Buffer(Radius);

Итак, все работает нормально, метод GetPointFromLatLong (пользовательский) возвращает правильный объект DbGeography, однако .Buffer(Radius) вызывает исключение, описанное ниже.

InnerException = {Была предпринята попытка загрузить программу с неверным форматом. (Исключение из HRESULT: 0x8007000B)}

Сообщение = Исключение было вызвано целью вызова.

Источник = mscorlib

StackTrace = at System.RuntimeMethodHandle.InvokeMethod (целевой объект, аргументы Object[], знак подписи, логический конструктор) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (объект obj, параметры Object[], аргументы Object[]) в System.Reflection. RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] параметры, культура CultureInfo) в System.Reflection.MethodBase.Invoke(Object obj, Object[] параметры) в System.Data.Entity.SqlServer.SqlSpatialServices.Buffer (DbGeography geographyValue, Double Distance) в System.Data.Entity.Spatial.DbGeography.Buffer(Nullable Distance) в GpsSilverlight.Web.Reports.ReportService.OnLoadData(параметры IDictionary`2, String reportName, ReportSlot reportSlot) в ПРОЕКТЕ: строка 1514

Я не могу понять, что здесь происходит. У кого-нибудь есть опыт в этом?

static DbGeography GetPointFromLatLong(double Latitude, double Longitude)
    {
        DbGeography geogTest;
        geogTest = DbGeography.PointFromText(string.Format("POINT({1} {0})", Latitude.ToString(), Longitude.ToString()), 4326);

        return geogTest;
    }

person Seb    schedule 19.04.2016    source источник
comment
Вы заявили, что прочитали все это.... но все же проверили ли вы Configuration Manager? Иногда конфигурация решения перепутана, особенно когда вы меняете ПК/пересоздаете репозиторий...   -  person Mat    schedule 19.04.2016
comment
Ага, идентичные! i.imgur.com/2rIUjqG.png   -  person Seb    schedule 19.04.2016
comment
При отладке есть ли внутреннее исключение с более подробной информацией об ошибке? Показать метод GetPointFromLatLong   -  person Nkosi    schedule 19.04.2016
comment
Я редактировал в GetPointFromLatLong, который возвращается правильно.   -  person Seb    schedule 19.04.2016
comment
Внутреннее исключение: InnerException = {Была предпринята попытка загрузить программу с неправильным форматом. (Исключение из HRESULT: 0x8007000B)} StackTrace = at Microsoft.SqlServer.Types.GLNativeMethods.GeodeticAngleExtent (GeoMarshalData g, двойной эксцентриситет, результат Double&)\r\n at Microsoft.SqlServer.Types.GLNativeMethods.GeodeticAngleExtent (GeoData g, двойной эксцентриситет )\r\n в Microsoft.SqlServer.T...   -  person Seb    schedule 19.04.2016
comment
Просто погуглите dbgeography 64-bit, много просмотров.   -  person Hans Passant    schedule 19.04.2016


Ответы (1)


Наиболее распространенная проблема при возникновении этого исключения заключается в том, что CLR работает в 32/64-битном режиме и пытается загрузить сборку, скомпилированную для 64/32-битного режима.

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

Лучший способ проверить, что компилятор ДЕЙСТВИТЕЛЬНО сделал для сборки ваших сборок (или тех, на которые вы полагаетесь), — это разобрать их и просмотреть информацию манифеста сборки всех ваших двоичных файлов. Часто одна сборка построена не в той конфигурации, которую вы считаете нужной.

Этот тип проблемы все еще иногда беспокоит меня, и дизассемблирование обычно помогает.

person Mahol25    schedule 19.04.2016