2012-02-28 47 views
5

Tôi có một phiên bản .NET 3.5 tham chiếu ODP (Oracle.DataAccess.dll), xây dựng trong Visual Studio 2010. Sao chép Local = False, Phiên bản cụ thể là sai. Đường dẫn làODP Oracle.DataAccess.DLL tham chiếu 32/64 bit

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

Phiên bản là 2.112.3.0, (Thời gian chạy v.2.0.50727). Tôi đã cài đặt ODAC 11.2.0.3.0 x86 trên máy phát triển của mình. Khi tôi xây dựng dự án này và thử nghiệm nó trong một bài kiểm tra tích hợp, mọi thứ hoạt động tốt và ODP được tải và sử dụng. Tôi đang cố gắng xây dựng thử nghiệm tích hợp tương tự trên Team City 7, trên máy Windows Server 2003 x64, sử dụng MSBuild (thông qua Team City). Máy này có cùng phiên bản ODAC được cài đặt, nhưng phiên bản x64.

Đã xảy ra sự cố khi tải lên tệp Oracle.DataAccess.dll. Dường như nó đang tìm kiếm phiên bản .NET 2, nhưng trước tiên tìm thấy phiên bản .NET 4, và sau đó chắc chắn thất bại. Nhìn vào các bản ghi, nó tìm thấy phiên bản .NET 4, nhưng vẫn không thể giải quyết tham chiếu và dường như đang tìm kiếm phiên bản x86 một cách rõ ràng. Cấu hình cho MSBuild là: Phiên bản MSBUILD: .NET 4.0 Chạy Nền tảng x86.

CSProject tham khảo:

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

(tôi đã cố gắng thay đổi nền tảng Run để x86, và dường như chấp nhận các thư viện Oracle.DataAccess.DLL, nhưng phàn nàn rằng tất cả các thư viện .NET lõi khác đang nhắm mục tiêu sai . nền tảng, ví dụ như mscorlib

tôi cũng đang cố gắng để làm một xây dựng thông qua một kịch bản cào trong đó sử dụng msbuild để xây dựng các giải pháp dự án, và nhận được vấn đề tương tự

Câu hỏi: 01.235.Làm thế nào tôi có thể làm điều này để xây dựng đúng trên máy x64 của tôi? Các phiên bản x86 và x64 của các thư viện có cùng PublicKeyToken, vì vậy nó không hoạt động? Có thể một thẻ tham chiếu trong CSProj được đặt để nhắm mục tiêu "CPU bất kỳ" thay vì x64 rõ ràng (bằng cách chỉnh sửa thủ công tệp) không? Hoặc, có cách nào đó để thiết lập một cách để điều kiện tham khảo một thư viện tùy thuộc vào kiến ​​trúc của máy xây dựng, như được hiển thị here (không chính xác chắc chắn vấn đề là gì, nhưng đây có thể là giải pháp)?

[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: 

Trả lời

5

Tôi gặp vấn đề tương tự. Vấn đề là trong phiên bản MsBuild trên máy chủ. Tôi đã sử dụng Msbuild 4.0 và nó đang sử dụng thời gian chạy v4.0 thay vì 2.0.xx được sử dụng trong MsBuild 3.5.

Hãy thử sử dụng Msbuild 3.5 nếu có thể. Nếu không, hãy kiểm tra GAC ​​của bạn nếu bạn đã cài đặt ODP đúng cách. Tôi không nhớ chính xác cách tôi đã sửa nó cho MSBuild 4.0, nhưng tôi phải chơi với các assembly GAC và machine.config.

Đây là danh sách GAC của tôi cho Oracle.DataAccess.dll trên 64bit xây dựng máy chủ của chúng tôi: Oracle.DataAccess.dll in my GAC

Đây là một phần của Machine.config. Tôi phải thêm chuyển hướng lắp ráp:

<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> 

Tôi cập nhật tất cả machine.configs để chắc chắn :) Nhưng việc cập nhật Framework64 machine.config là đủ.

+0

Trên máy xây dựng của mình, tôi chỉ có phiên bản 2.112.3.0 và 4.112.3.0 của AMD64. x64 không được liệt kê ở đó. Bạn có nghĩa là app.config không machine.config, hoặc hiện nó cần phải được thực hiện trên cấu hình của máy? Tôi đặt CSPRoj của tôi lên để không tìm phiên bản cụ thể, vì vậy không nên bao gồm các thay đổi machine.config của bạn? –

+0

Đối với các bulông teamcity sử dụng MSBUild (không phải là tập lệnh rake), thiết lập nó thành .NET 3.5 cho MSBuild khiến các assembly khác không thể xây dựng, chỉ ra rằng nó không thể tìm thấy LINQ. Điều này làm tôi bối rối vì LINQ có trong .NET 3.5 –

+0

Dường như bạn có thể đã cài đặt ODAC 32 bit và 64 bit? Ngoài ra, trong bình luận đầu tiên của tôi, tôi có nghĩa là để nói rằng "x86 không được liệt kê ở đó" trong câu thứ hai của tôi. Không thể chỉnh sửa ngay bây giờ. –

Các vấn đề liên quan