2012-02-28 11 views
5

मेरे पास एक .NET 3.5 असेंबली है जो विजुअल स्टूडियो 2010 में बिल्डिंग ओडीपी (Oracle.DataAccess.dll) का संदर्भ देती है। स्थानीय = गलत, विशिष्ट संस्करण कॉपी करें गलत है। पथओडीपी Oracle.DataAccess.DLL संदर्भ 32/64 बिट

C:\[ORACLE_BASE]\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll 

संस्करण 2.112.3.0, (रनटाइम v.2.0.50727) है। मेरे पास ओडीएसी 11.2.0.3.0 x86 है जो मेरी विकास मशीन पर स्थापित है। जब मैं इस परियोजना का निर्माण करता हूं और इसे एकीकरण परीक्षण में परीक्षण करता हूं, तो सब कुछ ठीक काम करता है और ओडीपी लोड और उपयोग किया जाता है। मैं MSBuild (टीम सिटी के माध्यम से) का उपयोग कर, विंडोज सर्वर 2003 x64 मशीन पर टीम सिटी 7 पर एक ही एकीकरण परीक्षण बनाने की कोशिश कर रहा हूं। इस मशीन में ओडीएसी का एक ही संस्करण स्थापित है, लेकिन x64 संस्करण।

Oracle.DataAccess.dll को लोड करने का प्रयास करने में कोई समस्या है। ऐसा लगता है कि यह .NET 2 संस्करण की तलाश में है, लेकिन पहले .NET 4 संस्करण पाता है, और फिर अनिवार्य रूप से विफल रहता है। लॉग को देखते हुए, यह .NET 4 संस्करण पाता है, लेकिन फिर भी संदर्भ को हल नहीं कर सकता है और स्पष्ट रूप से x86 संस्करण की तलाश में प्रतीत होता है। MSBuild के लिए कॉन्फ़िगरेशन है: MSBUILD संस्करण: .NET 4.0 रन प्लेटफ़ॉर्म x86।

CSProject संदर्भ:

<Reference Include="Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86" /> 

(मैं 86 को चलाने के प्लेटफार्म बदलने के की कोशिश की, और Oracle.DataAccess.DLL पुस्तकालय स्वीकार करने के लिए लगता है, लेकिन शिकायत है कि अन्य सभी कोर नेट पुस्तकालयों गलत लक्षित कर रहे हैं । मंच, जैसे mscorlib

मैं भी जो परियोजना समाधान इसी तरह के मुद्दों का निर्माण, और प्राप्त करने के लिए MSBuild का उपयोग करता है एक रेक स्क्रिप्ट के माध्यम से एक का निर्माण करने के लिए कोशिश कर रहा हूँ

सवाल: 01,235,मैं इसे अपने x64 मशीन पर ठीक से बनाने के लिए कैसे प्राप्त कर सकता हूं? पुस्तकालयों के x86 और x64 संस्करणों में एक ही सार्वजनिकKeyToken है, तो यह काम नहीं करना चाहिए? क्या सीएसपीआरजे में एक संदर्भ टैग स्पष्ट रूप से x64 (फ़ाइल को मैन्युअल रूप से संपादित करके) के बजाय "कोई भी CPU" लक्षित करने के लिए सेट किया जा सकता है? या, क्या here दिखाया गया है (बिल्कुल सही नहीं है कि समस्या क्या है, लेकिन यह समाधान हो सकता है) के रूप में बिल्ड मशीन के आर्किटेक्चर के आधार पर लाइब्रेरी को सशर्त रूप से संदर्भित करने का कोई तरीका स्थापित करने का कोई तरीका है?

[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\11.2.0\client_1\ODP.NET\bin\2.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\11.2.0\client_1\ODP.NET\bin\2.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\11.2.0\client_1\ASP.NET\bin\2.x\Oracle.DataAccess.dll", but it didn't exist. 
[14:30:09]   Considered "D:\ODAC_Base\product\11.2.0\client_1\ASP.NET\bin\2.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 Server\100\SDK\Assemblies\Oracle.DataAccess.dll", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Oracle.DataAccess.exe", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft.NET\ADOMD.NET\100\Oracle.DataAccess.dll", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft.NET\ADOMD.NET\100\Oracle.DataAccess.exe", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Oracle.DataAccess.dll", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Oracle.DataAccess.exe", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Tasks\Oracle.DataAccess.dll", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Tasks\Oracle.DataAccess.exe", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\DTS\PipelineComponents\Oracle.DataAccess.dll", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\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 Server\100\DTS\ForEachEnumerators\Oracle.DataAccess.dll", but it didn't exist. 
[14:30:09]   Considered "C:\Program Files (x86)\Microsoft SQL Server\100\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: 

उत्तर

5

मुझे एक ही समस्या थी। समस्या सर्वर पर एमएसबिल्ड संस्करण में थी। मैंने एमएसबिल्ड 4.0 का उपयोग किया और यह एमएसबिल्ड 3.5 में इस्तेमाल 2.0.xx के बजाय v4.0 रनटाइम का उपयोग कर रहा है।

यदि संभव हो तो एमएसबिल्ड 3.5 का उपयोग करने का प्रयास करें। यदि नहीं, तो आपके जीएसी की जांच करें यदि आपके पास ओडीपी सही तरीके से स्थापित है। मुझे बिल्कुल याद नहीं है कि मैंने इसे एमएसबिल्ड 4.0 के लिए कैसे तय किया, लेकिन मुझे जीएसी असेंबली और मशीन.कॉन्फिग के साथ खेलना पड़ा।

यह Oracle.DataAccess.dll हमारे 64 बिट का निर्माण सर्वर पर के लिए मेरे GAC सूची है: Oracle.DataAccess.dll in my GAC

यह machine.config का हिस्सा है। मैं विधानसभा रीडायरेक्ट जोड़ने के लिए किया था:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral" /> 
     <bindingRedirect oldVersion="2.102.0.0-2.120.0.0" newVersion="2.112.2.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
    </assemblyBinding> 
</runtime> 

मैं सभी machine.configs अद्यतन सुनिश्चित करने के लिए :) लेकिन Framework64 machine.config को अद्यतन करने के लिए पर्याप्त होना चाहिए।

+0

मेरी बिल्ड मशीन पर, मेरे पास केवल AMD64 का संस्करण 2.112.3.0 और 4.112.3.0 है। x64 वहां सूचीबद्ध नहीं है। क्या आपका मतलब है app.config machine.config नहीं, या मशीन की कॉन्फ़िगरेशन पर इसे करने की आवश्यकता है? मैंने अपने सीएसपीआरओजी को विशिष्ट संस्करण की तलाश नहीं करने के लिए सेट किया है, इसलिए क्या आपके मशीन.कॉन्फिग में बदलाव नहीं होना चाहिए? –

+0

एमएसबीउल्ड (रेक रेक नहीं) का उपयोग करने वाली टीमसिटी बल्बों के लिए, इसे एमएसबिल्ड के लिए .NET 3.5 पर सेट करने से अन्य असेंबली निर्माण में असफल हो जाते हैं, यह दर्शाता है कि यह LINQ नहीं ढूंढ सकता है। यह मुझे भ्रमित करता है क्योंकि LINQ .NET 3.5 –

+0

में है ऐसा लगता है कि आपने ओडीएसी 32 बिट और 64 बिट स्थापित किया हो सकता है? इसके अलावा, मेरी पहली टिप्पणी में, मेरा कहना था कि मेरी दूसरी वाक्य में "x86 सूचीबद्ध नहीं है"। इसे अभी संपादित नहीं कर सकता –

संबंधित मुद्दे