2013-02-01 49 views
6

Zainstalowałem odp.net 32-bitową instalację dla Visual Studio 2012. Ustawiłem odniesienie do Oracle.DataAccess.dll i moje połączenie z Oracle wydaje się działać.Błąd niezgodności Oracle.DataAccess

Po zbudowaniu projektu (.net 4) pojawia się następujący błąd. Projekt jest ustawiony na tworzenie AnyCPU (moja stacja robocza jest 64-bitowa, a serwer, na którym ostatecznie będziemy wdrażać, ma 32 bity).

"Wystąpiła niezgodność między architekturą procesora budowanego projektu" MSIL "a architekturą procesora odwołania Oracle.DataAcess, wersja 4.112.3.0, Culture = neutral, PublicKeyToken = 89b483f429c47342, processorArchitecture = x86, "x86". Ta niezgodność może spowodować awarie środowiska wykonawczego. Rozważ zmianę docelowej architektury procesora projektu za pomocą programu Menedżer konfiguracji, tak aby dopasować architekturę procesora między projektem a referencjami, lub skorzystaj z odniesienia do architektury procesora, która jest zgodna z docelową architekturą procesora projektu "

To tylko ostrzeżenie vs.net, ale czy istnieje sposób na pozbycie się tego?

Odpowiedz

14

Tak jak powiedziałeś, to tylko ostrzeżenie. Ponieważ ODP.net nie jest "AnyCPU", ostrzeżenie wskazuje, że masz zależność, która nie będzie dostosowywać się do systemu operacyjnego hosta, jak twoja własna aplikacja. Tak długo, jak twoja instalacja odp.net pasuje do OS pod względem bitów, będziesz w porządku. Ale kompilator nie jest w stanie dokonać tej determinacji i próbuje dać ci głowę.

Zrobiłem znaleźć connect article na ten temat, który obejmuje ewentualną zmianę (jestem zakładając do pliku proj), aby wyłączyć błąd:

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

W każdym razie, twój „AnyCPU” aplikacja będzie działać dobrze na serwerze tak długo, jak 32-bitowy odp.net, który instalujesz na serwerze, jest tą samą wersją co 64-bitowy odp.net, do którego się odwołujesz (lub zasady wydawcy są poprawnie zainstalowane, aby przekierować do nowszej wersji). Aby wyeliminować wszelkie zamieszanie, na ogół ustawiam "Kopiuj lokalnie" dla odniesienia do "fałsz". Innymi słowy kompiluję się z konkretną wersją biblioteki dll, ale pozwól jej działać wbrew temu, co rozwiązuje z GAC (która zawiera zasady wydawcy, które obejmuje większość instalacji odp.net).

Możesz również zainstalować 32-bitowy odp.net na swojej maszynie dev (najlepiej tej samej wersji ponownie), aby uruchamiać/debugować 32-bitowe aplikacje lub korzystać z zintegrowanego narzędzia, które pochodzi "z Oracle Developer Tools for Visual Studio "wewnątrz Visual Studio.

Wszystko to powiedziawszy, tutaj jest coś więcej niż tylko oko. Jeśli aplikacja faktycznie działa (co sugeruje "to tylko ostrzeżenie"), jako 64-bitowa, to NIE korzysta z 32-bitowej instalacji. Zgaduję, że twoja maszyna ma już zainstalowaną wersję 64-bitową (wiele domów z wyrocznią).

0

This is only a vs.net warning however is there any way to get rid of this?

wierzę, nie ma sposobu, aby pozbyć się, że skoro chcesz rozmieścić na 32 bitowej maszynie i utworzyć na 64 bit. To jest tylko ostrzeżenie, które informuje cię, że może być coś złego w sterowniku. Nic się nie martwić, jeśli teraz to, co robisz.

Należy się tego spodziewać - w 32-bitowych bibliotekach używa się architektury 64-bitowej.

0

Innym rozwiązaniem:

Pobierz ODAC 11.2 Release 5 (11.2.0.3.20) i ustawić kompilator x86. Jestem w 100% pewien, że wyczyści wszystkie ostrzeżenia związane z wyrocznią. Ustaw obszar nazw na: using System.Data.Odbc;

Następnie wykonaj połączenie z bazą danych.