Вот мое решение 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 [выпущено 11 сентября 2012 г.]
Я распаковал этот zip-файл.
Я искал и выискивал эти файлы:
oci.dll
Oracle.DataAccess.dll
orannzsbb11.dll
oraociei11.dll
OraOps11w.dll
Обратите внимание, что когда было 2 файла с одинаковым именем, я взял версию "bin \ 2.x \" или "odp.net20 \ bin" для своей потребности в 3.5 Framework (я еще не на 4.0).
Я взял эти файлы и поместил их в подпапку, где находится мой файл .sln.
.\MySolution.sln
.\MyConsoleApplicationFolder\MyConsoleApp.csproj
.\ThirdPartyReferences\
.\ThirdPartyReferences\Oracle\
Я помещаю все файлы выше в
.\ThirdPartyReferences\Oracle\
папка
Я использовал «Добавить ссылку», чтобы добавить ссылку на Oracle.DataAccess.dll в проект csharp «MyConsoleApp.csproj».
(Это, конечно, означало переход к «.. \ ThirdPartyReferences \ Oracle \»)
Я использовал «Событие Post Build» для копирования файлов «extra» (он же, «accessory)»
Мои строки в пост-посте были:
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, конечно же, для загрузки всех файлов)
Я пошел и добавил ссылку на:
\ пакеты \ CommonServiceLocator.1.0 \ Lib \ NET35 \ Microsoft.Practices.ServiceLocation.dll
Это прояснило проблемы.
И мой код csharp: (примечание "выберите *" только для демонстрационных целей)
/*
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
Итак, когда я поместил всю конфигурацию, код и прочее в реальный проект (который был установлен на «Любой процессор» на 64-битной машине) ... все, что я сделал, перестало работать. <</p>
После небольшой настройки ........
Я нашел этот файл на oracle.com
ODAC1120320Xcopy_x64.zip
Затем я повторил все, что делал выше, но искал разархивированные файлы этого xip-файла x64.
Все работает.
Но то, что по умолчанию "x86" с консольным приложением, заставило меня задуматься.