これが私のXcopyソリューションです。
に投稿しました
( https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/#comment-181 )
同じように。
しかし、ここで書式設定の問題なしに xml を投稿できると思います。
Nuget "packages.config"
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CommonServiceLocator" version="1.0" targetFramework="net35" />
<package id="EnterpriseLibrary.Common" version="5.0.505.0" targetFramework="net35" />
<package id="EnterpriseLibrary.Data" version="5.0.505.0" targetFramework="net35" />
<package id="EntLibContrib.Data.OdpNet" version="5.0.505.0" targetFramework="net35" />
<package id="Unity" version="2.1.505.2" targetFramework="net35" />
<package id="Unity.Interception" version="2.1.505.2" targetFramework="net35" />
</packages>
app.config
(以下のタグに注意してください<clear />
。これは必要な場合と必要でない場合がありますが、machine.config ファイルに何が含まれているかがわからないため、それらをクリアする方がよいと考えました)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<dataConfiguration defaultDatabase="OracleMainConnectionString">
</dataConfiguration>
<connectionStrings>
<add name="OracleMainConnectionString"
connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyOracleServerName)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MyServiceName)));User ID=MyUserName;Password=MyPassword;"
providerName="Oracle.DataAccess.Client" />
</connectionStrings>
<appSettings>
<add key="ExampleKey" value="ExampleValue" />
</appSettings>
<system.data>
<DbProviderFactories>
<clear />
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<add name="EntLibContrib.Data.OdpNet" invariant="EntLibContrib.Data.OdpNet" description="EntLibContrib Data OdpNet Provider" type="EntLibContrib.Data.OdpNet.OracleDatabase, EntLibContrib.Data.OdpNet, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" />
</DbProviderFactories>
</system.data>
</configuration>
x64 Windows 7 マシンで開発しています。
ダウンロードしたもの: ODAC1120320Xcopy_32bit.zip (oracle.com から)
これは次のとおりです。
ODAC 11.2 リリース 5 (11.2.0.3.20) XCopy バージョンをダウンロード [2012 年 9 月 11 日リリース]
このzipファイルを解凍しました。
これらのファイルを検索して釣り上げました:
oci.dll Oracle.DataAccess.dll orannzsbb11.dll oraociei11.dll OraOps11w.dll
同じ名前のファイルが 2 つある場合、3.5 フレームワークのニーズに合わせて "bin\2.x\" または "odp.net20\bin" バージョンを使用したことに注意してください (まだ 4.0 を使用していません)。
これらのファイルを取得し、.sln ファイルが存在する場所のサブフォルダーに配置しました。
.\MySolution.sln
.\MyConsoleApplicationFolder\MyConsoleApp.csproj
.\ThirdPartyReferences\
.\ThirdPartyReferences\Oracle\
上記のすべてのファイルを
.\ThirdPartyReferences\Oracle\
フォルダ
「参照の追加」を使用して、Oracle.DataAccess.dll への参照を「MyConsoleApp.csproj」csharp プロジェクトに追加しました。(もちろん、これは「..\ThirdPartyReferences\Oracle\」への参照を意味します)
「ビルド後のイベント」を使用して「余分な」(別名、「アクセサリ」)ファイルをコピーしました
ビルド後のイベントの私の行は次のとおりです。
copy $(ProjectDir)..\ThirdPartyReferences\Oracle\oci.dll $(TargetDir)*.*
copy $(ProjectDir)..\ThirdPartyReferences\Oracle\orannzsbb11.dll $(TargetDir)*.*
copy $(ProjectDir)..\ThirdPartyReferences\Oracle\oraociei11.dll $(TargetDir)*.*
copy $(ProjectDir)..\ThirdPartyReferences\Oracle\OraOps11w.dll $(TargetDir)*.*
ビルド後のイベントは、上記の URL の説明の「新しい場合はコピー」を置き換えることに注意してください。
プロジェクトを実行したとき........dll の欠落エラーがいくつか発生しました。
注: EnterpriseLibrary.Data オブジェクトへの呼び出しを含むアセンブリでは、「Microsoft.Practices.SomethingSomething 名前空間が見つかりません。エラーがなくなるまで、これらの dll への参照を追加し続けます (上記の package.config がプルダウンされます)。
ここに特定のものがあります:
"Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified."
だから(もちろんNugetを実行した後、すべてのファイルをダウンロードするために)私は行って参照を追加しました:
\packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll
それは問題を解決しました。
そして私のcsharpコード:(「select *」はデモ目的のみであることに注意してください)
/*
using System;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
*/
public IDataReader EmployeesGetAll()
{
IDataReader returnReader = null;
try
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbc = db.GetSqlStringCommand("SELECT * FROM ( SELECT * FROM TEMPLOYEE ) WHERE ROWNUM <= 25");
returnReader = db.ExecuteReader(dbc);
return returnReader;
}
finally
{
}
}
そしてそれはうまくいきました。
ありがとうございました:
https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/#comment-181
これにより、ODP.NET が「xcopy」デプロイメントになると思います。
確実にするために、クリーンなマシンでテストする必要があります。
しかし、それは一日の終わりです........
================
追加情報:
上記はすべて正しいです。ただし、注意点があります。「コンソール アプリケーション」を使用してコードをテストしていました。
新しいコンソール アプリケーションを Visual Studio に追加すると、デフォルトで x86 になります。
ここに見られるように:
http://www.xavierdecoster.com/post/2011/02/15/console-application-visual-studio-gotcha-on-x64-os-aspx
編集:(更新されたリンク)
http://www.xavierdecoster.com/post/2011/02/15/console-application-visual-studio-gotcha-on-x64-os
そのため、すべての構成とコードなどを実際のプロジェクト (x64 ビット マシンで「任意の CPU」に設定) に配置すると、行ったすべてのことが機能しなくなりました。:<
少し調整した後........ oracle.com ODAC1120320Xcopy_x64.zip でこのファイルを見つけました。その後、上記のすべてを繰り返しましたが、この x64 zip ファイルの解凍されたファイルを検索しました。
すべてが機能しています。
しかし、コンソール アプリケーションでの「x86」のデフォルトは、ループに陥りました。