Oracle .NET 2 provider разработка под Visual Studio 2013

Така, ето какво е положението:

  • стар код от .NET 3.5
  • използва Oracle .NET 2 provider
  • DataSet-и
  • трябва да се подкара спешно, а има налично само VS 2013

Резултатът е: Exception of type System.Data.Design.InternalException was thrown при отваряне на dataset и при build на проекта.

Повечете предложения за решения се ограничаваха до това, че в xsd файла има директни референции към Oracle Connection String и съответно те причиняват проблем. Това, не беше случая при мене, макар и да имаше доста коментари по Интернет, че решава проблема.

Почти бях изпаднал в безизходица докато не стигнах до http://blogs.msdn.com/b/psssql/archive/2011/04/21/conversion-issues-moving-from-vs-2005-to-vs-2008.aspx. Макар и подобен проблем, пътят до решението беше описан методично и точно! InternalException в System.Data.Design може да се появи само в два случая:

  • Cannot find provider factory named {0}
  • More than one data row for provider named {0}

Аха! И двата имаха нещо общо с provider и то вероятно Oracle-ския. Нещата започнаха да се избистрят – ODP.NET беше инсталиран, но само за 2.0, а VS 2013 използва .NET 4.5 и съответно друг CLR и не може да го намери design time.

И наистина в C:\windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config има

и

Ако тези секции се преместят и в machine.config за .NET 4 всичко, донякъде изненадващо, върви точно.