ODP Oracle.DataAccess.DLL référence 32/64 bits
J'ai un .NET 3.5 assemblée que les références de l'ODP (Oracle.DataAccess.dll), la construction dans Visual Studio 2010. Copie Locale = Faux, Version Spécifique est faux. Le chemin est
C:\[ORACLE_BASE]\product.2.0\client_1\ODP.NET\bin.x\Oracle.DataAccess.dll
La version est 2.112.3.0, (Runtime v. 2.0.50727). J'ai ODAC 11.2.0.3.0 x86 installé sur ma machine de développement. Quand j'ai construit ce projet et de le tester dans un test d'intégration, tout fonctionne bien et ODP est chargé et utilisé. Je suis en train de construire le même test d'intégration de l'Équipe de la Ville 7, sur un Serveur Windows server 2003 x64-linge, à l'aide de MSBuild (via l'Équipe de la Ville). Cette machine a la même version de l'ODAC installé, mais la version x64.
Il y a un problème en essayant de charger l'Oracle.DataAccess.dll. Il semble qu'il cherche .NET 2 version, mais trouve d'abord le .NET 4 version, puis échoue inévitablement. En regardant les logs, il trouve le .NET 4 version, mais ne peut toujours pas résoudre la référence et semble être explicitement à la recherche pour la version x86. La configuration pour MSBuild est:
MSBUILD Version: .NET 4.0
Exécution Plate-forme x86.
CSProject référence:
<Reference Include="Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86" />
(J'ai essayé de changer les Exécuter Plate-forme x86, et semble accepter le Oracle.DataAccess.DLL bibliothèque, mais se plaint que tous les autres .NET les bibliothèques sont le ciblage de la mauvaise plate-forme, par exemple, mscorlib
J'essaie aussi de faire un build via un râteau de script qui utilise msbuild pour construire le projet de la solution, et d'obtenir des problèmes similaires.
Questions:
Comment puis-je obtenir ce pour construire correctement sur ma machine x64? Le x86 et le x64 versions des bibliothèques ont la même PublicKeyToken, donc, ne devrait-elle pas de travail? Peut une Référence balise dans un CSProj être mis à la cible "any CPU" plutôt que d'être explicitement x64 (en éditant manuellement le fichier)? Ou, est-il possible de mettre en place un moyen pour conditionnellement référence à une bibliothèque de fonction sur la machine de compilation de l'architecture, comme le montre ici (pas exactement quel est le problème, mais cela peut être une solution)?
[14:30:09]PrepareForBuild:
[14:30:09] Creating directory "bin\Debug\".
[14:30:09]ResolveAssemblyReferences:
[14:30:09] Unified primary reference "Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86".
[14:30:09] Using this version instead of original version "2.112.3.0" in "D:\TeamCity\buildAgent\work\f2ad3a714cc001ba\Source\MyProj\MyProj.Data.Oracle\bin\Debug\MyProj.Data.Oracle.dll" because AutoUnify is 'true'.
[14:30:09]C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [D:\TeamCity\buildAgent\work\f2ad3a714cc001ba\Source\MyProj\MyProj.IntegrationTests\MyProj.IntegrationTests.csproj]
[14:30:09] For SearchPath "D:\TeamCity\buildAgent\work\f2ad3a714cc001ba\Source\MyProj\MyProj.Data.Oracle\bin\Debug".
[14:30:09] Considered "D:\TeamCity\buildAgent\work\f2ad3a714cc001ba\Source\MyProj\MyProj.Data.Oracle\bin\Debug\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "D:\TeamCity\buildAgent\work\f2ad3a714cc001ba\Source\MyProj\MyProj.Data.Oracle\bin\Debug\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] For SearchPath "{TargetFrameworkDirectory}".
[14:30:09] Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] For SearchPath "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}".
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Itanium\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Itanium\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\VSTA\v9.0\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\VSTA\v9.0\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "D:\ODAC_Base\product.2.0\client_1\ODP.NET\bin.x\Oracle.DataAccess.dll", but its name "Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" didn't match.
[14:30:09] Considered "D:\ODAC_Base\product.2.0\client_1\ODP.NET\bin.x\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft Chart Controls\Assemblies\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft Chart Controls\Assemblies\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "D:\ODAC_Base\product.2.0\client_1\ASP.NET\bin.x\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "D:\ODAC_Base\product.2.0\client_1\ASP.NET\bin.x\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] For SearchPath "{AssemblyFolders}".
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft.NET\ADOMD.NET0\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft.NET\ADOMD.NET0\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\DTS\PipelineComponents\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\DTS\PipelineComponents\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\DTS\ForEachEnumerators\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "C:\Program Files (x86)\Microsoft SQL Server0\DTS\ForEachEnumerators\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09] For SearchPath "{GAC}".
[14:30:09] Considered "Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86", which was not found in the GAC.
[14:30:09] For SearchPath "bin\Debug\".
[14:30:09] Considered "bin\Debug\Oracle.DataAccess.dll", but it didn't exist.
[14:30:09] Considered "bin\Debug\Oracle.DataAccess.exe", but it didn't exist.
[14:30:09]GenerateTargetFrameworkMonikerAttribute:
OriginalL'auteur Stealth Rabbi | 2012-02-28
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. Le problème était dans le MsBuild version sur le serveur. J'ai utilisé Msbuild 4.0 et c'est à l'aide de v4.0 l'exécution au lieu de 2.0.xx utilisé dans MsBuild 3.5.
Essayez d'utiliser Msbuild 3.5 si possible. Si non, vérifiez votre cas si vous avez ODP installé correctement. Je ne me souviens pas exactement comment je l'ai corrigé pour MSBuild 4.0, mais j'ai dû jouer avec le GAC assemblées et de la machine.config.
C'est mon GAC de liste pour Oracle.DataAccess.dll sur notre 64 bits, serveur de build:
C'est la partie de la machine.config. J'ai dû ajouter de l'assemblée de redirection:
J'ai mis à jour toutes les machines.les configs pour être sûr 🙂 Mais la mise à jour Framework64 de la machine.config devrait être suffisant.
Pour le teamcity bulids qui utilisent MSBUild (pas le râteau script), le paramètre .NET 3.5 pour MSBuild des causes autres assemblées ne parviennent pas à construire, indiquant qu'il ne peut pas trouver de LINQ. Cela me confond depuis LINQ .NET 3.5
Il semble que vous avez installé l'ODAC 32 bits et 64 bits? Aussi, dans mon premier commentaire, je voulais dire que "x86 n'est pas dans la liste il y a" dans mon deuxième phrase. Ne pouvez pas la modifier maintenant.
Bien. J'ai probablement installé 32&64 bits. Dans therory, 64 bits, l'installation devrait être suffisant. J'ai mis à jour la machine.config à l'intérieur .NET framework dossier d'installation. Il y a deux, un pour le 2.0.x runtime et un pour la version 4.0 de l'exécution. Désolé, c'était il y a longtemps et je ne me souviens pas exactement de ce que j'ai fait il y a un an...
Eh bien, j'ai fini par installer les versions x86 et x64 et ça fonctionne. J'ai mis x86 dans un autre ORACLE_HOME de base et elle construit très bien, et je n'ai pas besoin de changer toute l'Équipe de la Ville de paramètres (toujours faire MSBuild v4.0). Je n'ai pas fini d'avoir à changer toute la machine.config.
OriginalL'auteur Ludwo