Ошибка несоответствия Oracle.DataAccess

Я установил 32-битную установку odp.net для Visual Studio 2012. Я установил ссылку на Oracle.DataAccess.dll, и мое подключение к Oracle, похоже, работает.

Когда я создаю проект (.net 4), я получаю следующую ошибку. Проект настроен на сборку AnyCPU (моя рабочая станция 64-битная, а сервер, на котором мы в конечном итоге будем развертывать, — 32-битный).

«Обнаружено несоответствие между процессорной архитектурой строящегося проекта «MSIL» и процессорной архитектурой эталонного Oracle.DataAcess, версия 4.112.3.0, культура = нейтральная, PublicKeyToken = 89b483f429c47342, CPUArchitecture = x86, «x86». Это несоответствие может вызвать сбои во время выполнения. Рассмотрите возможность изменения архитектуры целевого процессора вашего проекта с помощью диспетчера конфигураций, чтобы согласовать архитектуру процессора между вашим проектом и ссылками, или используйте зависимость от ссылки с архитектурой процессора, которая соответствует архитектуре целевого процессора вашего проекта.

Это всего лишь предупреждение vs.net, но есть ли способ избавиться от этого?


person MrMVCMan    schedule 01.02.2013    source источник


Ответы (3)


Как вы сказали, это просто предупреждение. Поскольку ODP.net не является «AnyCPU», предупреждение указывает на то, что у вас есть зависимость, которая не будет адаптироваться к операционной системе хоста, как ваше собственное приложение. Пока ваша установка odp.net соответствует ОС с точки зрения битов, все будет в порядке. Но компилятор не может определить это и пытается предупредить вас.

Я нашел статью о подключении, в которой включает возможное изменение (я предполагаю, что файл proj), чтобы отключить ошибку:

<PropertyGroup>
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
</PropertyGroup>

В любом случае ваше приложение «AnyCPU» будет нормально работать на вашем сервере, если 32-разрядная версия odp.net, которую вы устанавливаете на сервере, имеет ту же версию, что и 64-разрядная версия odp.net, на которую вы ссылаетесь (или политики издателя должным образом установлены для перенаправить на более позднюю версию). Чтобы устранить любую путаницу, я обычно устанавливаю «Копировать локально» для ссылки на «ложь». Другими словами, я компилирую для определенной версии dll, но позволяю ей работать с тем, что она разрешает из GAC (включая политики издателя, которые включают большинство установок odp.net).

Вы также можете установить 32-разрядный odp.net на свой компьютер разработчика (в идеале снова ту же версию), чтобы запускать/отлаживать 32-разрядные приложения или использовать интегрированный инструментарий, который поставляется «с инструментами разработчика Oracle для Visual Studio» внутри Visual Studio. Студия.

Все, что сказал, здесь больше, чем кажется на первый взгляд. Если ваше приложение действительно работает (что подразумевается как «это только предупреждение») как 64-битное, то оно НЕ использует вашу 32-битную установку. Я предполагаю, что на вашей машине уже установлена ​​​​64-битная версия (несколько домов оракула).

person b_levitt    schedule 01.02.2013

Другое решение:

Загрузите ODAC 11.2, выпуск 5 (11.2.0.3.20) и установите компилятор на x86. Я на 100% уверен, что он очистит все предупреждения, связанные с оракулом. Установить пространство имен: using System.Data.Odbc;

Затем выполните подключение к базе данных.

person user3409326    schedule 26.08.2014

Это всего лишь предупреждение vs.net, но есть ли способ избавиться от этого?

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

Этого и следовало ожидать - вы используете 32-битные библиотеки на 64-битной архитектуре.

person maialithar    schedule 01.02.2013