| @@ -0,0 +1,55 @@ | ||
| # Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. | ||
|
|
||
| # This file contains command-line options that the VB | ||
| # command line compiler (VBC) will process as part | ||
| # of every compilation, unless the "/noconfig" option | ||
| # is specified. | ||
|
|
||
| # Reference the common Framework libraries | ||
| /r:Accessibility.dll | ||
| /r:System.Configuration.dll | ||
| /r:System.Configuration.Install.dll | ||
| /r:System.Data.dll | ||
| /r:System.Data.OracleClient.dll | ||
| /r:System.Deployment.dll | ||
| /r:System.Design.dll | ||
| /r:System.DirectoryServices.dll | ||
| /r:System.dll | ||
| /r:System.Drawing.Design.dll | ||
| /r:System.Drawing.dll | ||
| /r:System.EnterpriseServices.dll | ||
| /r:System.Management.dll | ||
| /r:System.Messaging.dll | ||
| /r:System.Runtime.Remoting.dll | ||
| /r:System.Runtime.Serialization.Formatters.Soap.dll | ||
| /r:System.Security.dll | ||
| /r:System.ServiceProcess.dll | ||
| /r:System.Transactions.dll | ||
| /r:System.Web.dll | ||
| /r:System.Web.Mobile.dll | ||
| /r:System.Web.RegularExpressions.dll | ||
| /r:System.Web.Services.dll | ||
| /r:System.Windows.Forms.dll | ||
| /r:System.XML.dll | ||
|
|
||
| /r:System.Workflow.Activities.dll | ||
| /r:System.Workflow.ComponentModel.dll | ||
| /r:System.Workflow.Runtime.dll | ||
| /r:System.Runtime.Serialization.dll | ||
| /r:System.ServiceModel.dll | ||
|
|
||
| /r:System.Core.dll | ||
| /r:System.Xml.Linq.dll | ||
| /r:System.Data.Linq.dll | ||
| /r:System.Data.DataSetExtensions.dll | ||
| /r:System.Web.Extensions.dll | ||
| /r:System.Web.Extensions.Design.dll | ||
| /r:System.ServiceModel.Web.dll | ||
|
|
||
| # Import System and Microsoft.VisualBasic | ||
| /imports:System | ||
| /imports:Microsoft.VisualBasic | ||
| /imports:System.Linq | ||
| /imports:System.Xml.Linq | ||
|
|
||
| /optioninfer+ |
| @@ -0,0 +1,75 @@ | ||
| function AddOrUpdate-Reference($scriptsFolderProjectItem, $fileNamePattern, $newFileName) { | ||
| try { | ||
| $referencesFileProjectItem = $scriptsFolderProjectItem.ProjectItems.Item("_references.js") | ||
| } | ||
| catch { | ||
| # _references.js file not found | ||
| return | ||
| } | ||
|
|
||
| if ($referencesFileProjectItem -eq $null) { | ||
| # _references.js file not found | ||
| return | ||
| } | ||
|
|
||
| $referencesFilePath = $referencesFileProjectItem.FileNames(1) | ||
| $referencesTempFilePath = Join-Path $env:TEMP "_references.tmp.js" | ||
|
|
||
| if ((Select-String $referencesFilePath -pattern $fileNamePattern).Length -eq 0) { | ||
| # File has no existing matching reference line | ||
| # Add the full reference line to the beginning of the file | ||
| "/// <reference path=""$newFileName"" />" | Add-Content $referencesTempFilePath -Encoding UTF8 | ||
| Get-Content $referencesFilePath | Add-Content $referencesTempFilePath | ||
| } | ||
| else { | ||
| # Loop through file and replace old file name with new file name | ||
| Get-Content $referencesFilePath | ForEach-Object { $_ -replace $fileNamePattern, $newFileName } > $referencesTempFilePath | ||
| } | ||
|
|
||
| # Copy over the new _references.js file | ||
| Copy-Item $referencesTempFilePath $referencesFilePath -Force | ||
| Remove-Item $referencesTempFilePath -Force | ||
| } | ||
|
|
||
| function Remove-Reference($scriptsFolderProjectItem, $fileNamePattern) { | ||
| try { | ||
| $referencesFileProjectItem = $scriptsFolderProjectItem.ProjectItems.Item("_references.js") | ||
| } | ||
| catch { | ||
| # _references.js file not found | ||
| return | ||
| } | ||
|
|
||
| if ($referencesFileProjectItem -eq $null) { | ||
| return | ||
| } | ||
|
|
||
| $referencesFilePath = $referencesFileProjectItem.FileNames(1) | ||
| $referencesTempFilePath = Join-Path $env:TEMP "_references.tmp.js" | ||
|
|
||
| if ((Select-String $referencesFilePath -pattern $fileNamePattern).Length -eq 1) { | ||
| # Delete the line referencing the file | ||
| Get-Content $referencesFilePath | ForEach-Object { if (-not ($_ -match $fileNamePattern)) { $_ } } > $referencesTempFilePath | ||
|
|
||
| # Copy over the new _references.js file | ||
| Copy-Item $referencesTempFilePath $referencesFilePath -Force | ||
| Remove-Item $referencesTempFilePath -Force | ||
| } | ||
| } | ||
|
|
||
| # Extract the version number from the file in the package's content\scripts folder | ||
| $packageScriptsFolder = Join-Path $installPath Content\Scripts | ||
| $modernizrFileName = Join-Path $packageScriptsFolder "modernizr-*.js" | Get-ChildItem -Exclude "*.min.js","*-vsdoc.js" | Split-Path -Leaf | ||
| $modernizrFileNameRegEx = "modernizr-((?:\d+\.)?(?:\d+\.)?(?:\d+\.)?(?:\d+)).js" | ||
| $modernizrFileName -match $modernizrFileNameRegEx | ||
| $ver = $matches[1] | ||
|
|
||
| # Get the project item for the scripts folder | ||
| try { | ||
| $scriptsFolderProjectItem = $project.ProjectItems.Item("Scripts") | ||
| $projectScriptsFolderPath = $scriptsFolderProjectItem.FileNames(1) | ||
| } | ||
| catch { | ||
| # No Scripts folder | ||
| Write-Host "No scripts folder found" | ||
| } |
| @@ -0,0 +1,12 @@ | ||
| param($installPath, $toolsPath, $package, $project) | ||
|
|
||
| . (Join-Path $toolsPath common.ps1) | ||
|
|
||
| if ($scriptsFolderProjectItem -eq $null) { | ||
| # No Scripts folder | ||
| Write-Host "No Scripts folder found" | ||
| exit | ||
| } | ||
|
|
||
| # Update the _references.js file | ||
| AddOrUpdate-Reference $scriptsFolderProjectItem $modernizrFileNameRegEx $modernizrFileName |
| @@ -0,0 +1,6 @@ | ||
| param($installPath, $toolsPath, $package, $project) | ||
|
|
||
| . (Join-Path $toolsPath common.ps1) | ||
|
|
||
| # Update the _references.js file | ||
| Remove-Reference $scriptsFolderProjectItem $modernizrFileNameRegEx |
| @@ -0,0 +1,93 @@ | ||
| param($installPath, $toolsPath, $package, $project) | ||
|
|
||
| # open json.net splash page on package install | ||
| # don't open if json.net is installed as a dependency | ||
|
|
||
| try | ||
| { | ||
| $url = "http://james.newtonking.com/json" | ||
| $dte2 = Get-Interface $dte ([EnvDTE80.DTE2]) | ||
|
|
||
| if ($dte2.ActiveWindow.Caption -eq "Package Manager Console") | ||
| { | ||
| # user is installing from VS NuGet console | ||
| # get reference to the window, the console host and the input history | ||
| # show webpage if "install-package newtonsoft.json" was last input | ||
|
|
||
| $consoleWindow = $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]) | ||
|
|
||
| $props = $consoleWindow.GetType().GetProperties([System.Reflection.BindingFlags]::Instance -bor ` | ||
| [System.Reflection.BindingFlags]::NonPublic) | ||
|
|
||
| $prop = $props | ? { $_.Name -eq "ActiveHostInfo" } | select -first 1 | ||
| if ($prop -eq $null) { return } | ||
|
|
||
| $hostInfo = $prop.GetValue($consoleWindow) | ||
| if ($hostInfo -eq $null) { return } | ||
|
|
||
| $history = $hostInfo.WpfConsole.InputHistory.History | ||
|
|
||
| $lastCommand = $history | select -last 1 | ||
|
|
||
| if ($lastCommand) | ||
| { | ||
| $lastCommand = $lastCommand.Trim().ToLower() | ||
| if ($lastCommand.StartsWith("install-package") -and $lastCommand.Contains("newtonsoft.json")) | ||
| { | ||
| $dte2.ItemOperations.Navigate($url) | Out-Null | ||
| } | ||
| } | ||
| } | ||
| else | ||
| { | ||
| # user is installing from VS NuGet dialog | ||
| # get reference to the window, then smart output console provider | ||
| # show webpage if messages in buffered console contains "installing...newtonsoft.json" in last operation | ||
|
|
||
| $instanceField = [NuGet.Dialog.PackageManagerWindow].GetField("CurrentInstance", [System.Reflection.BindingFlags]::Static -bor ` | ||
| [System.Reflection.BindingFlags]::NonPublic) | ||
| $consoleField = [NuGet.Dialog.PackageManagerWindow].GetField("_smartOutputConsoleProvider", [System.Reflection.BindingFlags]::Instance -bor ` | ||
| [System.Reflection.BindingFlags]::NonPublic) | ||
| if ($instanceField -eq $null -or $consoleField -eq $null) { return } | ||
|
|
||
| $instance = $instanceField.GetValue($null) | ||
| if ($instance -eq $null) { return } | ||
|
|
||
| $consoleProvider = $consoleField.GetValue($instance) | ||
| if ($consoleProvider -eq $null) { return } | ||
|
|
||
| $console = $consoleProvider.CreateOutputConsole($false) | ||
|
|
||
| $messagesField = $console.GetType().GetField("_messages", [System.Reflection.BindingFlags]::Instance -bor ` | ||
| [System.Reflection.BindingFlags]::NonPublic) | ||
| if ($messagesField -eq $null) { return } | ||
|
|
||
| $messages = $messagesField.GetValue($console) | ||
| if ($messages -eq $null) { return } | ||
|
|
||
| $operations = $messages -split "==============================" | ||
|
|
||
| $lastOperation = $operations | select -last 1 | ||
|
|
||
| if ($lastOperation) | ||
| { | ||
| $lastOperation = $lastOperation.ToLower() | ||
|
|
||
| $lines = $lastOperation -split "`r`n" | ||
|
|
||
| $installMatch = $lines | ? { $_.StartsWith("------- installing...newtonsoft.json ") } | select -first 1 | ||
|
|
||
| if ($installMatch) | ||
| { | ||
| $dte2.ItemOperations.Navigate($url) | Out-Null | ||
| } | ||
| } | ||
| } | ||
| } | ||
| catch | ||
| { | ||
| # stop potential errors from bubbling up | ||
| # worst case the splash page won't open | ||
| } | ||
|
|
||
| # yolo |
| @@ -0,0 +1,115 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <configSections xdt:Transform="InsertIfMissing"> | ||
| </configSections> | ||
|
|
||
| <configSections xdt:Transform="InsertBefore(/configuration/*[1])"> | ||
| </configSections> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <configSections xdt:Locator="XPath(/configuration/configSections[last()])"> | ||
| <section name="oracle.manageddataaccess.client" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </configSections> | ||
|
|
||
| <!-- insert new entry --> | ||
| <configSections xdt:Locator="XPath(/configuration/configSections[last()])"> | ||
| <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Insert" /> | ||
| </configSections> | ||
|
|
||
| <configSections xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- If system.data tag is absent --> | ||
| <system.data xdt:Transform="InsertIfMissing"> | ||
| <DbProviderFactories> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- If system.data tag is present, but DbProviderFactories tag is absent --> | ||
| <system.data> | ||
| <DbProviderFactories xdt:Transform="InsertIfMissing"> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- remove existing ODPM entry --> | ||
| <system.data> | ||
| <DbProviderFactories> | ||
| <remove invariant="Oracle.ManagedDataAccess.Client" xdt:Transform="Remove" xdt:Locator="Match(invariant)" /> | ||
| <add name="ODP.NET, Managed Driver" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- add new ODPM entry --> | ||
| <system.data> | ||
| <DbProviderFactories> | ||
| <remove invariant="Oracle.ManagedDataAccess.Client" xdt:Transform="Insert"/> | ||
| <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Insert" /> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- If runtime tag is absent --> | ||
| <runtime xdt:Transform="InsertIfMissing"> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- If runtime tag is present, but assembly binding tag is absent --> | ||
| <runtime> | ||
| <assemblyBinding xdt:Transform="InsertIfMissing" xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| <dependentAssembly xdt:Transform="Remove" | ||
| xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Oracle.ManagedDataAccess')" > | ||
| </dependentAssembly> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- insert new entry --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| <dependentAssembly xdt:Transform="Insert"> | ||
| <publisherPolicy apply="no"/> | ||
| <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" /> | ||
| <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0" /> | ||
| </dependentAssembly> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- If oracle.manageddataaccess.client tag is absent --> | ||
| <oracle.manageddataaccess.client xdt:Transform="InsertIfMissing"> | ||
| <version number="*"> | ||
| <dataSources> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- If version tag is absent --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*" xdt:Transform="InsertIfMissing"> | ||
| <dataSources> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- If dataSources tag is absent --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources xdt:Transform="InsertIfMissing"> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- add entry if missing --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources> | ||
| <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " xdt:Transform="InsertIfMissing" xdt:Locator="Match(alias)"/> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1,4 @@ | ||
| <configuration> | ||
| <configSections> | ||
| </configSections> | ||
| </configuration> |
| @@ -0,0 +1,64 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <configSections> | ||
| <section name="oracle.manageddataaccess.client" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </configSections> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <configSections xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <system.data> | ||
| <DbProviderFactories> | ||
| <remove invariant="Oracle.ManagedDataAccess.Client" xdt:Transform="Remove" xdt:Locator="Match(invariant)" /> | ||
| <add name="ODP.NET, Managed Driver" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <system.data> | ||
| <DbProviderFactories xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </system.data> | ||
| <system.data xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| <dependentAssembly xdt:Transform="Remove" | ||
| xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Oracle.ManagedDataAccess')" > | ||
| </dependentAssembly> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </runtime> | ||
| <runtime xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources> | ||
| <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " xdt:Transform="Remove" xdt:Locator="Match(alias)"/> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*" xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <oracle.manageddataaccess.client xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1,114 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <configSections xdt:Transform="InsertIfMissing"> | ||
| </configSections> | ||
|
|
||
| <configSections xdt:Transform="InsertBefore(/configuration/*[1])"> | ||
| </configSections> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <configSections xdt:Locator="XPath(/configuration/configSections[last()])"> | ||
| <section name="oracle.manageddataaccess.client" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </configSections> | ||
|
|
||
| <!-- insert new entry --> | ||
| <configSections xdt:Locator="XPath(/configuration/configSections[last()])"> | ||
| <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Insert" /> | ||
| </configSections> | ||
|
|
||
| <configSections xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- If system.data tag is absent --> | ||
| <system.data xdt:Transform="InsertIfMissing"> | ||
| <DbProviderFactories> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- If system.data tag is present, but DbProviderFactories tag is absent --> | ||
| <system.data> | ||
| <DbProviderFactories xdt:Transform="InsertIfMissing"> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- remove existing ODPM entry --> | ||
| <system.data> | ||
| <DbProviderFactories> | ||
| <remove invariant="Oracle.ManagedDataAccess.Client" xdt:Transform="Remove" xdt:Locator="Match(invariant)" /> | ||
| <add name="ODP.NET, Managed Driver" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- add new ODPM entry --> | ||
| <system.data> | ||
| <DbProviderFactories> | ||
| <remove invariant="Oracle.ManagedDataAccess.Client" xdt:Transform="Insert"/> | ||
| <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Insert" /> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- If runtime tag is absent --> | ||
| <runtime xdt:Transform="InsertIfMissing"> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- If runtime tag is present, but assembly binding tag is absent --> | ||
| <runtime> | ||
| <assemblyBinding xdt:Transform="InsertIfMissing" xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| <dependentAssembly xdt:Transform="Remove" | ||
| xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Oracle.ManagedDataAccess')" > | ||
| </dependentAssembly> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- insert new entry --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| <dependentAssembly xdt:Transform="Insert"> | ||
| <publisherPolicy apply="no"/> | ||
| <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" /> | ||
| </dependentAssembly> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- If oracle.manageddataaccess.client tag is absent --> | ||
| <oracle.manageddataaccess.client xdt:Transform="InsertIfMissing"> | ||
| <version number="*"> | ||
| <dataSources> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- If version tag is absent --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*" xdt:Transform="InsertIfMissing"> | ||
| <dataSources> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- If dataSources tag is absent --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources xdt:Transform="InsertIfMissing"> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- add entry if missing --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources> | ||
| <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " xdt:Transform="InsertIfMissing" xdt:Locator="Match(alias)"/> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1,4 @@ | ||
| <configuration> | ||
| <configSections> | ||
| </configSections> | ||
| </configuration> |
| @@ -0,0 +1,64 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <configSections> | ||
| <section name="oracle.manageddataaccess.client" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </configSections> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <configSections xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <system.data> | ||
| <DbProviderFactories> | ||
| <remove invariant="Oracle.ManagedDataAccess.Client" xdt:Transform="Remove" xdt:Locator="Match(invariant)" /> | ||
| <add name="ODP.NET, Managed Driver" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <system.data> | ||
| <DbProviderFactories xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </system.data> | ||
| <system.data xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| <dependentAssembly xdt:Transform="Remove" | ||
| xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Oracle.ManagedDataAccess')" > | ||
| </dependentAssembly> | ||
| </assemblyBinding> | ||
| </runtime> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </runtime> | ||
| <runtime xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources> | ||
| <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " xdt:Transform="Remove" xdt:Locator="Match(alias)"/> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*" xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| <oracle.manageddataaccess.client xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1,242 @@ | ||
| Oracle.ManagedDataAccess NuGet Package 12.2.1100 README | ||
| =========================================================== | ||
|
|
||
| Release Notes: Oracle Data Provider for .NET, Managed Driver | ||
|
|
||
| May 2017 | ||
|
|
||
| Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. | ||
|
|
||
| This document provides information that supplements the Oracle Data Provider for .NET (ODP.NET) documentation. | ||
| You have downloaded Oracle Data Provider for .NET from Oracle, the license agreement to which is available at | ||
| http://www.oracle.com/technetwork/licenses/distribution-license-152002.html | ||
|
|
||
| TABLE OF CONTENTS | ||
| *New Features | ||
| *Bug Fixes | ||
| *Installation and Configuration Steps | ||
| *Installation Changes | ||
| *Documentation Corrections and Additions | ||
| *ODP.NET, Managed Driver Tips, Limitations, and Known Issues | ||
|
|
||
| Note: The 32-bit "Oracle Developer Tools for Visual Studio" download from http://otn.oracle.com/dotnet is | ||
| required for Entity Framework design-time features and for other Visual Studio designers such as the | ||
| TableAdapter Wizard. This NuGet download does not enable design-time tools; it only provides run-time support. | ||
| This version of ODP.NET supports Oracle Database version 10.2 and higher. | ||
|
|
||
|
|
||
| New Features since Oracle.ManagedDataAccess NuGet Package 12.1.24160719 | ||
| ======================================================================= | ||
| 1. Database Resident Connection Pooling | ||
| 2. Multitenant and Pluggable Databases Connection Pooling | ||
| 3. Edition-Based Redefinition Connection Pooling | ||
| 4. Connection Configuration Upon Open | ||
| 5. .NET Framework 4.6.2 and 4.7 certification | ||
| 6. Longer Schema Identifiers | ||
| 7. PL/SQL Boolean Data Type | ||
|
|
||
| For more details on these features, visit the new features section of the ODP.NET documentation: | ||
| http://docs.oracle.com/cd/E85694_01/ODPNT/release_changes.htm#GUID-23EE609C-064C-484E-9D3A-C9CA4E1A970F | ||
|
|
||
|
|
||
| Bug Fixes since Oracle.ManagedDataAccess NuGet Package 12.1.24160719 | ||
| ==================================================================== | ||
| 24700485 VALUES ARE PARTIALLY FILLED IN DATATABLE USING MANAGED ODP.NET | ||
| 22765798 ODPM: INDEX OUTSIDE ARRAY BOUNDS EXCEPTION WHEN FETCHSIZE HAS LARGE VALUE | ||
| 24810947 KERBEROS INITIAL HANDSHAKE FAILS IF "AUTHENTICATOR" IS GREATER THAN SDU SIZE | ||
| 25490365 LATEST DST PATCH NEEDS TO BE ADDED FOR ODP.NET MANAGED DRIVER | ||
| 22385038 ORA-31061: XDB ERROR WHILE INSERTING DATA INTO XMLTYPE DATATYPE USING ODPM | ||
| 24299880 ORA-00303 WHEN PROGRAM PATH CONTAINS # CHARACTER AND POOLING ENABLED | ||
| 21393655 ODPM THROWS "INDEX WAS OUT OF RANGE" EXCEPTION WHILE FETCHING NULL AND XMLTYPE | ||
| 21847644 SYSTEM.INDEXOUTOFRANGEEXCEPTION OR SYSTEM.ARGUMENTEXCEPTION WITH MANAGED ODP.NET | ||
| 22308527 UNEXPECTED PACKET ERROR WITH NEWLINE WITHIN SQL QUERY | ||
|
|
||
|
|
||
| Installation and Configuration Steps | ||
| ==================================== | ||
| The downloads are NuGet packages that can be installed with the NuGet Package Manager. These instructions apply | ||
| to install ODP.NET, Managed Driver. | ||
|
|
||
| 1. Un-GAC and un-configure any existing assembly (i.e. Oracle.ManagedDataAccess.dll) and policy DLL | ||
| (i.e. Policy.4.122.Oracle.ManagedDataAccess.dll) for the ODP.NET, Managed Driver, version 12.2.0.1 | ||
| that exist in the GAC. Remove all references of Oracle.ManagedDataAccess from machine.config file, if any exists. | ||
|
|
||
| 2. In Visual Studio, open NuGet Package Manager from an existing Visual Studio project. | ||
|
|
||
| 3. Install the NuGet package from an OTN-downloaded local package source or from nuget.org. | ||
|
|
||
|
|
||
| From Local Package Source | ||
| ------------------------- | ||
| A. Click on the Settings button in the lower left of the dialog box. | ||
|
|
||
| B. Click the "+" button to add a package source. In the Source field, enter in the directory location where the | ||
| NuGet package(s) were downloaded to. Click the Update button, then the Ok button. | ||
|
|
||
| C. On the left side, under the Online root node, select the package source you just created. The ODP.NET NuGet | ||
| packages will appear. | ||
|
|
||
|
|
||
| From Nuget.org | ||
| -------------- | ||
| A. In the Search box in the upper right, search for the package with id, "Oracle.ManagedDataAccess". Verify | ||
| that the package uses this unique ID to ensure it is the official Oracle Data Provider for .NET, Managed Driver | ||
| download. | ||
|
|
||
| B. Select the package you wish to install. | ||
|
|
||
|
|
||
| 4. Click on the Install button to select the desired NuGet package(s) to include with the project. Accept the | ||
| license agreement and Visual Studio will continue the setup. | ||
|
|
||
| 5. Open the app/web.config file to configure the ODP.NET connection string and local naming parameters | ||
| (i.e. tnsnames.ora). Below is an example of configuring the local naming parameters: | ||
|
|
||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources> | ||
| <!-- Customize these connection alias settings to connect to Oracle DB --> | ||
| <dataSource alias="MyDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " /> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| After following these instructions, ODP.NET is now configured and ready to use. | ||
|
|
||
| NOTE: ODP.NET, Managed Driver comes with two platform specific assemblies: | ||
|
|
||
| i. Oracle.ManagedDataAccessDTC.dll (for Distributed Transaction Support) | ||
| ii. Oracle.ManagedDataAccessIOP.dll (for Kerberos Support) | ||
|
|
||
| The Oracle.ManagedDataAccessDTC.dll assembly is ONLY needed if you are using Distributed Trasactions and the | ||
| .NET Framework being used is 4.5.1 or lower. If you are using .NET Framework 4.5.2 or higher, this assembly does | ||
| not need to be referenced by your application. | ||
|
|
||
| The Oracle.ManagedDataAccessIOP.dll assembly is ONLY needed if you are using Kerberos5 based external | ||
| authentication. Kerberos5 users will need to download MIT Kerberos for Windows version 4.0.1 from | ||
| http://web.mit.edu/kerberos/dist/ | ||
| to utilize ODP.NET, Managed Driver's support of Kerberos5. | ||
|
|
||
| These asssemblies are located under | ||
| packages\Oracle.ManagedDataAccess.<version>\bin\x64 | ||
| and | ||
| packages\Oracle.ManagedDataAccess.<version>\bin\x86 | ||
| depending on the platform. | ||
|
|
||
| If these assemblies are required by your application, your Visual Studio project requires additional changes. | ||
|
|
||
| Use the following steps for your application to use the 64-bit version of Oracle.ManagedDataAccessDTC.dll: | ||
|
|
||
| 1. Right click on the Visual Studio project. | ||
| 2. Select Add -> New Folder | ||
| 3. Name the folder x64. | ||
| 4. Right click on the newly created x64 folder | ||
| 5. Select Add -> Existing Item | ||
| 6. Browse to packages\Oracle.ManagedDataAccess.<version>\bin\x64 under your project solution directory. | ||
| 7. Choose Oracle.ManagedDataAccessDTC.dll | ||
| 8. Click the 'Add' button | ||
| 9. Left click the newly added Oracle.ManagedDataAccessDTC.dll in the x64 folder | ||
| 10. In the properties window, set 'Copy To Output Directory' to 'Copy Always'. | ||
|
|
||
| For x86 targeted applications, name the folder x86 and add assemblies from the | ||
| packages\Oracle.ManagedDataAccess.<version>\bin\x86 folder. | ||
|
|
||
| Use the same steps for adding Oracle.ManagedDataAccessIOP.dll. | ||
|
|
||
| To make your application platform independent even if it depends on Oracle.ManagedDataAccessDTC.dll and/or | ||
| Oracle.ManagedDataAccessIOP.dll, create both x64 and x86 folders with the necessary assemblies added to them. | ||
|
|
||
|
|
||
| Installation Changes | ||
| ==================== | ||
| The following app/web.config entries are added by including the "Official Oracle ODP.NET, Managed Driver" NuGet package | ||
| to your application: | ||
|
|
||
| 1) Configuration Section Handler | ||
|
|
||
| The following entry is added to the app/web.config to enable applications to add an <oracle.manageddataaccess.client> | ||
| section for ODP.NET, Managed Driver-specific configuration: | ||
|
|
||
| <configuration> | ||
| <configSections> | ||
| <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> | ||
| </configSections> | ||
| </configuration> | ||
|
|
||
| Note: If your application is a web application and the above entry was added to a web.config and the same config | ||
| section handler for "oracle.manageddataaccess.client" also exists in machine.config but the "Version" attribute values | ||
| are different, an error message of "There is a duplicate 'oracle.manageddataaccess.client' section defined." may be | ||
| observed at runtime. If so, the config section handler entry in the machine.config for | ||
| "oracle.manageddataaccess.client" has to be removed from the machine.config for the web application to not encounter | ||
| this error. But given that there may be other applications on the machine that depended on this entry in the | ||
| machine.config, this config section handler entry may need to be moved to all of the application's .NET config file on | ||
| that machine that depend on it. | ||
|
|
||
| 2) DbProviderFactories | ||
|
|
||
| The following entry is added for applications that use DbProviderFactories and DbProviderFactory classes. Also, any | ||
| DbProviderFactories entry for "Oracle.ManagedDataAccess.Client" in the machine.config will be ignored with the following | ||
| entry: | ||
|
|
||
| <configuration> | ||
| <system.data> | ||
| <DbProviderFactories> | ||
| <remove invariant="Oracle.ManagedDataAccess.Client" /> | ||
| <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> | ||
| </DbProviderFactories> | ||
| </system.data> | ||
| </configuration> | ||
|
|
||
| 3) Dependent Assembly | ||
|
|
||
| The following entry is created to ignore policy DLLs for Oracle.ManagedDataAccess.dll and always use the | ||
| Oracle.ManagedDataAccess.dll version that is specified by the newVersion attribute in the <bindingRedirect> element. | ||
| The newVersion attribute corresponds to the Oracle.ManagedDataAccess.dll version which came with the NuGet package | ||
| associated with the application. | ||
|
|
||
| <configuration> | ||
| <runtime> | ||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | ||
| <dependentAssembly> | ||
| <publisherPolicy apply="no" /> | ||
| <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" /> | ||
| <bindingRedirect oldVersion="4.122.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0" /> | ||
| </dependentAssembly> | ||
| </assemblyBinding> | ||
| </runtime> | ||
| </configuration> | ||
|
|
||
| 4) Data Sources | ||
|
|
||
| The following entry is added to provide a template on how a data source can be configured in the app/web.config. | ||
| Simply rename "MyDataSource" to an alias of your liking and modify the PROTOCOL, HOST, PORT, SERVICE_NAME as required | ||
| and un-comment the <dataSource> element. Once that is done, the alias can be used as the "data source" attribute in | ||
| your connection string when connecting to an Oracle Database through ODP.NET, Managed Driver. | ||
|
|
||
| <configuration> | ||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources> | ||
| <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " /> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
| </configuration> | ||
|
|
||
|
|
||
| Documentation Corrections and Additions | ||
| ======================================= | ||
| This section contains information that corrects or adds to existing ODP.NET documentation, which can be found here: | ||
| http://www.oracle.com/technetwork/topics/dotnet/tech-info/index.html | ||
|
|
||
|
|
||
| ODP.NET, Managed Driver Tips, Limitations, and Known Issues | ||
| =========================================================== | ||
| This section contains information that is specific to ODP.NET, Managed Driver. | ||
|
|
||
| 1. OracleConnection object's OpenWithNewPassword() method invocation will result in an ORA-1017 error with 11.2.0.3.0 | ||
| and earlier versions of the database. [Bug 12876992] | ||
|
|
||
| 2. ODP.NET does not support usage of the "ALTER SESSION" statement to modify the Edition in Edition-Based Redefinition during the lifetime of a process. | ||
|
|
||
| 3. ODP.NET, Managed Driver and Distributed Transactions - Using managed ODP.NET distributed transactions with Oracle.ManagedDataAccessDTC.dll is deprecated as it is primarily used with .NET Framework 4 releases earlier than .NET 4.5.2. Microsoft has desupported these earlier .NET Framework 4 versions. Managed ODP.NET distributed transactions will continue to be supported and enhanced with .NET Framework's native fully managed distributed transaction implementation. |
| @@ -0,0 +1,37 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <!-- If connectionStrings tag is absent --> | ||
| <connectionStrings xdt:Transform="InsertIfMissing"> | ||
| </connectionStrings> | ||
|
|
||
| <!-- add entry if missing --> | ||
| <connectionStrings> | ||
| <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)" /> | ||
| </connectionStrings> | ||
|
|
||
| <!-- If entityFramework tag is absent --> | ||
| <entityFramework xdt:Transform="InsertIfMissing"> | ||
| </entityFramework> | ||
|
|
||
| <!-- If entityFramework tag is present but if providers tag is absent --> | ||
| <entityFramework> | ||
| <providers xdt:Transform="InsertIfMissing"> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <entityFramework> | ||
| <providers> | ||
| <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Remove" xdt:Locator="Match(invariantName)" /> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| <!-- insert new entry --> | ||
| <entityFramework> | ||
| <providers> | ||
| <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Insert" /> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1,25 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <connectionStrings> | ||
| <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </connectionStrings> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <connectionStrings xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <entityFramework> | ||
| <providers> | ||
| <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Remove" xdt:Locator="Match(invariantName)" /> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <entityFramework> | ||
| <providers xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </entityFramework> | ||
| <entityFramework xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1,37 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <!-- If connectionStrings tag is absent --> | ||
| <connectionStrings xdt:Transform="InsertIfMissing"> | ||
| </connectionStrings> | ||
|
|
||
| <!-- add entry if missing --> | ||
| <connectionStrings> | ||
| <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)" /> | ||
| </connectionStrings> | ||
|
|
||
| <!-- If entityFramework tag is absent --> | ||
| <entityFramework xdt:Transform="InsertIfMissing"> | ||
| </entityFramework> | ||
|
|
||
| <!-- If entityFramework tag is present but if providers tag is absent --> | ||
| <entityFramework> | ||
| <providers xdt:Transform="InsertIfMissing"> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <entityFramework> | ||
| <providers> | ||
| <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Remove" xdt:Locator="Match(invariantName)" /> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| <!-- insert new entry --> | ||
| <entityFramework> | ||
| <providers> | ||
| <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Insert" /> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1,25 @@ | ||
| <?xml version="1.0"?> | ||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <connectionStrings> | ||
| <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" xdt:Transform="Remove" xdt:Locator="Match(name)" /> | ||
| </connectionStrings> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <connectionStrings xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| <!-- remove existing entry --> | ||
| <entityFramework> | ||
| <providers> | ||
| <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" xdt:Transform="Remove" xdt:Locator="Match(invariantName)" /> | ||
| </providers> | ||
| </entityFramework> | ||
|
|
||
| <!-- remove if section is empty --> | ||
| <entityFramework> | ||
| <providers xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
| </entityFramework> | ||
| <entityFramework xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" /> | ||
|
|
||
| </configuration> |
| @@ -0,0 +1 @@ | ||
| You have downloaded Oracle Data Provider for .NET from Oracle, the license agreement to which is available at http://www.oracle.com/technetwork/licenses/distribution-license-152002.html |
| @@ -0,0 +1,198 @@ | ||
| Oracle.ManagedDataAccess.EntityFramework Nuget Package Version 12.2.1100 README | ||
| =============================================================================== | ||
|
|
||
| Release Notes: Oracle Data Provider for .NET, Managed Driver for Entity Framework | ||
|
|
||
| May 2017 | ||
|
|
||
| Copyright (c) Oracle Corporation 2017 | ||
|
|
||
| This document provides information that supplements the Oracle Data Provider for .NET (ODP.NET) for Entity | ||
| Framework documentation. You have downloaded Oracle Data Provider for .NET for Entity Framework from Oracle, | ||
| the license agreement to which is available at | ||
| http://www.oracle.com/technetwork/licenses/distribution-license-152002.html | ||
|
|
||
| TABLE OF CONTENTS | ||
| *New Features | ||
| *Installation and Configuration Steps | ||
| *Installation Changes | ||
| *Documentation Corrections and Additions | ||
| *Entity Framework Tips, Limitations, and Known Issues | ||
|
|
||
|
|
||
| Note: Please consult the ODP.NET, Managed Driver NuGet README at packages\Oracle.ManagedDataAccess.<version> | ||
| for more information about the component. | ||
|
|
||
| Note: The 32-bit "Oracle Developer Tools for Visual Studio" download from http://otn.oracle.com/dotnet is | ||
| required for Entity Framework design-time features. This NuGet download does not enable design-time tools; it | ||
| only provides run-time support. This version of ODP.NET for Entity Framework supports Oracle Database version | ||
| 10.2 and higher. | ||
|
|
||
|
|
||
|
|
||
| New Features since Oracle.ManagedDataAccess.EntityFramework Nuget Package Version 12.1.2400 | ||
| =========================================================================================== | ||
| None | ||
|
|
||
|
|
||
|
|
||
| Installation and Configuration Steps | ||
| ==================================== | ||
| The downloads are NuGet packages that can be installed with the NuGet Package Manager. These instructions apply | ||
| to install ODP.NET, Managed Driver for Entity Framework. | ||
|
|
||
| 1. Un-GAC any existing ODP.NET for Entity Framework 12.2.0.1 versions you have installed. For example, if you | ||
| plan to use only the ODP.NET, Managed Driver for Entity Framework, only un-GAC existing managed ODP.NET for | ||
| Entity Framework 12.2.0.1 versions then. | ||
|
|
||
| 2. In Visual Studio, open NuGet Package Manager from an existing Visual Studio project. | ||
|
|
||
| 3. Install the NuGet package from an OTN-downloaded local package source or from nuget.org. | ||
|
|
||
|
|
||
| From Local Package Source | ||
| ------------------------- | ||
| A. Click on the Settings button in the lower left of the dialog box. | ||
|
|
||
| B. Click the "+" button to add a package source. In the Source field, enter in the directory location where the | ||
| NuGet package(s) were downloaded to. Click the Update button, then the Ok button. | ||
|
|
||
| C. On the left side, under the Online root node, select the package source you just created. The ODP.NET for | ||
| Entity Framework NuGet package will appear. | ||
|
|
||
|
|
||
| From Nuget.org | ||
| -------------- | ||
| A. In the Search box in the upper right, search for the package with id, | ||
| "Oracle.ManagedDataAccess.EntityFramework". Verify that the package uses this unique ID to ensure it is the | ||
| offical Oracle Data Provider for .NET, Managed Driver for Entity Framework downloads. | ||
|
|
||
| B. Select the package you wish to install. | ||
|
|
||
|
|
||
| 4. Click on the Install button to select the desired NuGet package(s) to include with the project. Accept the | ||
| license agreement and Visual Studio will continue the setup. ODP.NET, Managed Driver will be installed | ||
| automatically as a dependency for ODP.NET, Managed Driver for Entity Framework. | ||
|
|
||
| 5. Open the app/web.config file to configure the ODP.NET connection string and local naming parameters | ||
| (i.e. tnsnames.ora). Below is an example of configuring the local naming parameters: | ||
|
|
||
| <oracle.manageddataaccess.client> | ||
| <version number="*"> | ||
| <dataSources> | ||
| <!-- Customize these connection alias settings to connect to Oracle DB --> | ||
| <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " /> | ||
| </dataSources> | ||
| </version> | ||
| </oracle.manageddataaccess.client> | ||
|
|
||
| 6. Modify the app/web.config file's connection string to create a DbContext your Entity Framework application | ||
| will use. Below is an example of a configured DbContext. | ||
|
|
||
| <connectionStrings> | ||
| <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" | ||
| connectionString="User Id=hr;Password=hr;Data Source=MyDataSource"/> | ||
| </connectionStrings> | ||
|
|
||
| After following these instructions, ODP.NET, Managed Driver for Entity Framework is now configured and ready | ||
| to use. | ||
|
|
||
| NOTE: ODP.NET, Managed Driver may require its own configuration. Please consult the component's README | ||
| at packages\Oracle.ManagedDataAccess.<version>. | ||
|
|
||
|
|
||
|
|
||
| Installation Changes | ||
| ==================== | ||
| The following app/web.config entries are added by including the "Official Oracle ODP.NET, Managed Entity Framework Driver" | ||
| NuGet package to your application. | ||
|
|
||
| 1) Entity Framework | ||
|
|
||
| The following entry is added to enable Entity Framework to use Oracle.ManagedDataAccess.dll for executing Entity | ||
| Framework related-operations, such as Entity Framework Code First and Entity Framework Code First Migrations against | ||
| the Oracle Database. | ||
|
|
||
| <configuration> | ||
| <entityFramework> | ||
| <providers> | ||
| <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> | ||
| </providers> | ||
| </entityFramework> | ||
| </configuration> | ||
|
|
||
| 2) Connection String | ||
|
|
||
| The following entry is added to enable the classes that are derived from DbContext to be associated with a connection | ||
| string instead to associating the derived class with a connection string programmatically by passing it via its | ||
| constructor. The name of "OracleDbContext" should be changed to the class name of your class that derives from DbContext. | ||
| In addition, the connectionString attribute should be modified properly to set the "User Id", "Password", and | ||
| "Data Source" appropriately with valid values. | ||
|
|
||
| <configuration> | ||
| <connectionStrings> | ||
| <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" /> | ||
| </connectionStrings> | ||
| </configuration> | ||
|
|
||
|
|
||
|
|
||
| Documentation Corrections and Additions | ||
| ======================================= | ||
| None | ||
|
|
||
|
|
||
|
|
||
| Entity Framework Tips, Limitations, and Known Issues | ||
| ==================================================== | ||
| This section contains Entity Framework related information that pertains to both ODP.NET, Managed Driver and ODP.NET, | ||
| Unmanaged Driver. | ||
|
|
||
| 1. Interval Day to Second and Interval Year to Month column values cannot be compared to literals in a WHERE clause of | ||
| a LINQ to Entities or an Entity SQL query. | ||
|
|
||
| 2. LINQ to Entities and Entity SQL (ESQL) queries that require the usage of SQL APPLY in the generated queries will | ||
| cause SQL syntax error(s) if the Oracle Database being used does not support APPLY. In such cases, the inner exception | ||
| message will indicate that APPLY is not supported by the database. | ||
|
|
||
| 3. ODP.NET does not currently support wildcards that accept character ranges for the LIKE operator in Entity SQL | ||
| (i.e. [] and [^]). [Bug 11683837] | ||
|
|
||
| 4. Executing LINQ or ESQL query against tables with one or more column names that are close to or equal to the maximum | ||
| length of identifiers (30 bytes) may encounter "ORA-00972: identifier is too long" error, due to the usage of alias | ||
| identifier(s) in the generated SQL that exceed the limit. | ||
|
|
||
| 5. An "ORA-00932: inconsistent datatypes: expected - got NCLOB" error will be encountered when trying to bind a string | ||
| that is equal to or greater than 2,000 characters in length to an XMLType column or parameter. [Bug 12630958] | ||
|
|
||
| 6. An "ORA-00932 : inconsistent datatypes" error can be encountered if a string of 2,000 or more characters, or a byte | ||
| array with 4,000 bytes or more in length, is bound in a WHERE clause of a LINQ/ESQL query. The same error can be | ||
| encountered if an entity property that maps to a BLOB, CLOB, NCLOB, LONG, LONG RAW, XMLTYPE column is used in a WHERE | ||
| clause of a LINQ/ESQL query. | ||
|
|
||
| 7. An "Arithmetic operation resulted in an overflow" exception can be encountered when fetching numeric values that | ||
| have more precision than what the .NET type can support. In such cases, the LINQ or ESQL query can "cast" the value | ||
| to a particular .NET or EDM type to limit the precision and avoid the exception. This approach can be useful if the | ||
| LINQ/ESQL query has computed/calculated columns which will store up to 38 precision in Oracle, which cannot be | ||
| represented as .NET decimal unless the value is casted. | ||
|
|
||
| 8. Oracle Database treats NULLs and empty strings the same. When executing string related operations on NULLS or empty | ||
| strings, the result will be NULL. When comparing strings with NULLs, use the equals operator (i.e. "x == NULL") in the | ||
| LINQ query, which will in turn use the "IS NULL" condition in the generated SQL that will appropriately detect NULL-ness. | ||
|
|
||
| 9. If an exception message of "The store provider factory type 'Oracle.ManagedDataAccess.Client.OracleClientFactory' | ||
| does not implement the IServiceProvider interface." is encountered when executing an Entity Framework application with | ||
| ODP.NET, the machine.config requires and entry for ODP.NET under the <DbProviderFactories> section. To resolve this | ||
| issue by adding an entry in the machine.config, reinstall ODAC. | ||
|
|
||
| 10. Creating a second instance of the context that derives from DbContext within an application and executing methods | ||
| within the scope of that context that result in an interaction with the database may result in unexpected recreation of | ||
| the database objects if the DropCreateDatabaseAlways database initializer is used. | ||
|
|
||
| More Informations: https://entityframework.codeplex.com/workitem/2362 | ||
|
|
||
| Known Workarounds: | ||
| - Use a different database initializer, | ||
| - Use an operating system authenticated user for the connection, or | ||
| - Include "Persist Security Info=true" in the connection string (Warning: Turning on "Persist Security Info" will cause | ||
| the password to remain as part of the connection string). |
| @@ -0,0 +1,326 @@ | ||
| /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ | ||
| /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ | ||
| window.matchMedia = window.matchMedia || (function(doc, undefined){ | ||
|
|
||
| var bool, | ||
| docElem = doc.documentElement, | ||
| refNode = docElem.firstElementChild || docElem.firstChild, | ||
| // fakeBody required for <FF4 when executed in <head> | ||
| fakeBody = doc.createElement('body'), | ||
| div = doc.createElement('div'); | ||
|
|
||
| div.id = 'mq-test-1'; | ||
| div.style.cssText = "position:absolute;top:-100em"; | ||
| fakeBody.style.background = "none"; | ||
| fakeBody.appendChild(div); | ||
|
|
||
| return function(q){ | ||
|
|
||
| div.innerHTML = '­<style media="'+q+'"> #mq-test-1 { width: 42px; }</style>'; | ||
|
|
||
| docElem.insertBefore(fakeBody, refNode); | ||
| bool = div.offsetWidth == 42; | ||
| docElem.removeChild(fakeBody); | ||
|
|
||
| return { matches: bool, media: q }; | ||
| }; | ||
|
|
||
| })(document); | ||
|
|
||
|
|
||
|
|
||
|
|
||
| /*! Respond.js v1.2.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ | ||
| (function( win ){ | ||
| //exposed namespace | ||
| win.respond = {}; | ||
|
|
||
| //define update even in native-mq-supporting browsers, to avoid errors | ||
| respond.update = function(){}; | ||
|
|
||
| //expose media query support flag for external use | ||
| respond.mediaQueriesSupported = win.matchMedia && win.matchMedia( "only all" ).matches; | ||
|
|
||
| //if media queries are supported, exit here | ||
| if( respond.mediaQueriesSupported ){ return; } | ||
|
|
||
| //define vars | ||
| var doc = win.document, | ||
| docElem = doc.documentElement, | ||
| mediastyles = [], | ||
| rules = [], | ||
| appendedEls = [], | ||
| parsedSheets = {}, | ||
| resizeThrottle = 30, | ||
| head = doc.getElementsByTagName( "head" )[0] || docElem, | ||
| base = doc.getElementsByTagName( "base" )[0], | ||
| links = head.getElementsByTagName( "link" ), | ||
| requestQueue = [], | ||
|
|
||
| //loop stylesheets, send text content to translate | ||
| ripCSS = function(){ | ||
| var sheets = links, | ||
| sl = sheets.length, | ||
| i = 0, | ||
| //vars for loop: | ||
| sheet, href, media, isCSS; | ||
|
|
||
| for( ; i < sl; i++ ){ | ||
| sheet = sheets[ i ], | ||
| href = sheet.href, | ||
| media = sheet.media, | ||
| isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; | ||
|
|
||
| //only links plz and prevent re-parsing | ||
| if( !!href && isCSS && !parsedSheets[ href ] ){ | ||
| // selectivizr exposes css through the rawCssText expando | ||
| if (sheet.styleSheet && sheet.styleSheet.rawCssText) { | ||
| translate( sheet.styleSheet.rawCssText, href, media ); | ||
| parsedSheets[ href ] = true; | ||
| } else { | ||
| if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) | ||
| || href.replace( RegExp.$1, "" ).split( "/" )[0] === win.location.host ){ | ||
| requestQueue.push( { | ||
| href: href, | ||
| media: media | ||
| } ); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| makeRequests(); | ||
| }, | ||
|
|
||
| //recurse through request queue, get css text | ||
| makeRequests = function(){ | ||
| if( requestQueue.length ){ | ||
| var thisRequest = requestQueue.shift(); | ||
|
|
||
| ajax( thisRequest.href, function( styles ){ | ||
| translate( styles, thisRequest.href, thisRequest.media ); | ||
| parsedSheets[ thisRequest.href ] = true; | ||
| makeRequests(); | ||
| } ); | ||
| } | ||
| }, | ||
|
|
||
| //find media blocks in css text, convert to style blocks | ||
| translate = function( styles, href, media ){ | ||
| var qs = styles.match( /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi ), | ||
| ql = qs && qs.length || 0, | ||
| //try to get CSS path | ||
| href = href.substring( 0, href.lastIndexOf( "/" )), | ||
| repUrls = function( css ){ | ||
| return css.replace( /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + href + "$2$3" ); | ||
| }, | ||
| useMedia = !ql && media, | ||
| //vars used in loop | ||
| i = 0, | ||
| j, fullq, thisq, eachq, eql; | ||
|
|
||
| //if path exists, tack on trailing slash | ||
| if( href.length ){ href += "/"; } | ||
|
|
||
| //if no internal queries exist, but media attr does, use that | ||
| //note: this currently lacks support for situations where a media attr is specified on a link AND | ||
| //its associated stylesheet has internal CSS media queries. | ||
| //In those cases, the media attribute will currently be ignored. | ||
| if( useMedia ){ | ||
| ql = 1; | ||
| } | ||
|
|
||
|
|
||
| for( ; i < ql; i++ ){ | ||
| j = 0; | ||
|
|
||
| //media attr | ||
| if( useMedia ){ | ||
| fullq = media; | ||
| rules.push( repUrls( styles ) ); | ||
| } | ||
| //parse for styles | ||
| else{ | ||
| fullq = qs[ i ].match( /@media *([^\{]+)\{([\S\s]+?)$/ ) && RegExp.$1; | ||
| rules.push( RegExp.$2 && repUrls( RegExp.$2 ) ); | ||
| } | ||
|
|
||
| eachq = fullq.split( "," ); | ||
| eql = eachq.length; | ||
|
|
||
| for( ; j < eql; j++ ){ | ||
| thisq = eachq[ j ]; | ||
| mediastyles.push( { | ||
| media : thisq.split( "(" )[ 0 ].match( /(only\s+)?([a-zA-Z]+)\s?/ ) && RegExp.$2 || "all", | ||
| rules : rules.length - 1, | ||
| hasquery: thisq.indexOf("(") > -1, | ||
| minw : thisq.match( /\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ), | ||
| maxw : thisq.match( /\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ) | ||
| } ); | ||
| } | ||
| } | ||
|
|
||
| applyMedia(); | ||
| }, | ||
|
|
||
| lastCall, | ||
|
|
||
| resizeDefer, | ||
|
|
||
| // returns the value of 1em in pixels | ||
| getEmValue = function() { | ||
| var ret, | ||
| div = doc.createElement('div'), | ||
| body = doc.body, | ||
| fakeUsed = false; | ||
|
|
||
| div.style.cssText = "position:absolute;font-size:1em;width:1em"; | ||
|
|
||
| if( !body ){ | ||
| body = fakeUsed = doc.createElement( "body" ); | ||
| body.style.background = "none"; | ||
| } | ||
|
|
||
| body.appendChild( div ); | ||
|
|
||
| docElem.insertBefore( body, docElem.firstChild ); | ||
|
|
||
| ret = div.offsetWidth; | ||
|
|
||
| if( fakeUsed ){ | ||
| docElem.removeChild( body ); | ||
| } | ||
| else { | ||
| body.removeChild( div ); | ||
| } | ||
|
|
||
| //also update eminpx before returning | ||
| ret = eminpx = parseFloat(ret); | ||
|
|
||
| return ret; | ||
| }, | ||
|
|
||
| //cached container for 1em value, populated the first time it's needed | ||
| eminpx, | ||
|
|
||
| //enable/disable styles | ||
| applyMedia = function( fromResize ){ | ||
| var name = "clientWidth", | ||
| docElemProp = docElem[ name ], | ||
| currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp, | ||
| styleBlocks = {}, | ||
| lastLink = links[ links.length-1 ], | ||
| now = (new Date()).getTime(); | ||
|
|
||
| //throttle resize calls | ||
| if( fromResize && lastCall && now - lastCall < resizeThrottle ){ | ||
| clearTimeout( resizeDefer ); | ||
| resizeDefer = setTimeout( applyMedia, resizeThrottle ); | ||
| return; | ||
| } | ||
| else { | ||
| lastCall = now; | ||
| } | ||
|
|
||
| for( var i in mediastyles ){ | ||
| var thisstyle = mediastyles[ i ], | ||
| min = thisstyle.minw, | ||
| max = thisstyle.maxw, | ||
| minnull = min === null, | ||
| maxnull = max === null, | ||
| em = "em"; | ||
|
|
||
| if( !!min ){ | ||
| min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); | ||
| } | ||
| if( !!max ){ | ||
| max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); | ||
| } | ||
|
|
||
| // if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true | ||
| if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){ | ||
| if( !styleBlocks[ thisstyle.media ] ){ | ||
| styleBlocks[ thisstyle.media ] = []; | ||
| } | ||
| styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] ); | ||
| } | ||
| } | ||
|
|
||
| //remove any existing respond style element(s) | ||
| for( var i in appendedEls ){ | ||
| if( appendedEls[ i ] && appendedEls[ i ].parentNode === head ){ | ||
| head.removeChild( appendedEls[ i ] ); | ||
| } | ||
| } | ||
|
|
||
| //inject active styles, grouped by media type | ||
| for( var i in styleBlocks ){ | ||
| var ss = doc.createElement( "style" ), | ||
| css = styleBlocks[ i ].join( "\n" ); | ||
|
|
||
| ss.type = "text/css"; | ||
| ss.media = i; | ||
|
|
||
| //originally, ss was appended to a documentFragment and sheets were appended in bulk. | ||
| //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one! | ||
| head.insertBefore( ss, lastLink.nextSibling ); | ||
|
|
||
| if ( ss.styleSheet ){ | ||
| ss.styleSheet.cssText = css; | ||
| } | ||
| else { | ||
| ss.appendChild( doc.createTextNode( css ) ); | ||
| } | ||
|
|
||
| //push to appendedEls to track for later removal | ||
| appendedEls.push( ss ); | ||
| } | ||
| }, | ||
| //tweaked Ajax functions from Quirksmode | ||
| ajax = function( url, callback ) { | ||
| var req = xmlHttp(); | ||
| if (!req){ | ||
| return; | ||
| } | ||
| req.open( "GET", url, true ); | ||
| req.onreadystatechange = function () { | ||
| if ( req.readyState != 4 || req.status != 200 && req.status != 304 ){ | ||
| return; | ||
| } | ||
| callback( req.responseText ); | ||
| } | ||
| if ( req.readyState == 4 ){ | ||
| return; | ||
| } | ||
| req.send( null ); | ||
| }, | ||
| //define ajax obj | ||
| xmlHttp = (function() { | ||
| var xmlhttpmethod = false; | ||
| try { | ||
| xmlhttpmethod = new XMLHttpRequest(); | ||
| } | ||
| catch( e ){ | ||
| xmlhttpmethod = new ActiveXObject( "Microsoft.XMLHTTP" ); | ||
| } | ||
| return function(){ | ||
| return xmlhttpmethod; | ||
| }; | ||
| })(); | ||
|
|
||
| //translate CSS | ||
| ripCSS(); | ||
|
|
||
| //expose update for re-running respond later on | ||
| respond.update = ripCSS; | ||
|
|
||
| //adjust on resize | ||
| function callMedia(){ | ||
| applyMedia( true ); | ||
| } | ||
| if( win.addEventListener ){ | ||
| win.addEventListener( "resize", callMedia, false ); | ||
| } | ||
| else if( win.attachEvent ){ | ||
| win.attachEvent( "onresize", callMedia ); | ||
| } | ||
| })(this); |
| @@ -0,0 +1,90 @@ | ||
| param($installPath, $toolsPath, $package, $project) | ||
|
|
||
| # Return a relative path with reference to root as Uri object | ||
| # $rootPath - root path | ||
| # $relativePath - relative path | ||
| # $appendToRelativePath - Optional parameter. If provided will be appended to relative Path using Path.Combine() | ||
| Function GetRelativeUri($rootPath, $relativePath, $appendToRelativePath) | ||
| { | ||
| if($rootPath -eq $null) | ||
| { | ||
| return $null | ||
| } | ||
|
|
||
| if($relativePath -eq $null) | ||
| { | ||
| return $null | ||
| } | ||
|
|
||
| $rootUri = new-object system.Uri($rootPath) | ||
| $targetPath = $relativePath | ||
|
|
||
| # If appendToRelativePath is provided then use it | ||
| if($appendToRelativePath -ne $null) | ||
| { | ||
| $targetPath = [io.path]::Combine($relativePath, $appendToRelativePath) | ||
| } | ||
|
|
||
| $targetUri = new-object system.Uri($targetPath) | ||
| $relativeUri = $rootUri.MakeRelativeUri($targetUri) | ||
|
|
||
| return $relativeUri | ||
| } | ||
|
|
||
| # Visual Studio execution done via NuGet Package Manager | ||
| Function VSExecution($installPath, $package, $project) | ||
| { | ||
| #$project.DTE.ExecuteCommand("File.SaveAll", [system.string]::Empty) | ||
|
|
||
| # Get the msbuild version of the project and add the import | ||
| $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 | ||
|
|
||
| # add a property for us to be able to reference the path where the package was installed | ||
| $relativePackageUri = GetRelativeUri $project.FullName $installPath"\lib" | ||
|
|
||
| $msbuild.Xml.AddProperty("WebGreaseLibPath", $relativePackageUri.ToString().Replace([System.IO.Path]::AltDirectorySeparatorChar, [System.IO.Path]::DirectorySeparatorChar)) | ||
|
|
||
| # save the project | ||
| $project.Save() | ||
| } | ||
|
|
||
| # Command line execution done by any external tool (For example, NuGetUpdater) | ||
| # $package - package id | ||
| # $project - parameter value is path to Project file in this case. | ||
| Function CommandLineExecution($installPath, $package, $project) | ||
| { | ||
| [Reflection.Assembly]::LoadWithPartialName("Microsoft.Build") | ||
| [Reflection.Assembly]::LoadWithPartialName("System.Xml") | ||
| [Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") | ||
|
|
||
| # Get the msbuild version of the project and add the import | ||
| $projXDoc = [System.Xml.Linq.XDocument]::Load($project) | ||
|
|
||
| $defaultNameSpace = $projXDoc.Root.GetDefaultNamespace() | ||
|
|
||
| $propertyGroup = [System.Xml.Linq.XName]::Get("PropertyGroup", $defaultNameSpace.NamespaceName) | ||
| $webGreaseBuildLocation = [System.Xml.Linq.XName]::Get("WebGreaseLibPath", $defaultNameSpace.NamespaceName) | ||
|
|
||
| # add a property for us to be able to reference the path where the package was installed | ||
| $relativePackageUri = GetRelativeUri $project.FullName $installPath"\lib" | ||
|
|
||
| $propGroupElement = $projXDoc.Root.Elements($propertyGroup) | Select-Object -First 1 | ||
| IF ($propGroupElement -ne $null) | ||
| { | ||
| $newElement = new-object System.Xml.Linq.XElement($webGreaseBuildLocation, $relativePackageUri.ToString().Replace([System.IO.Path]::AltDirectorySeparatorChar, [System.IO.Path]::DirectorySeparatorChar)) | ||
| $propGroupElement.Add($newElement) | ||
| } | ||
|
|
||
| # save the project | ||
| $projXDoc.Save($project) | ||
| } | ||
|
|
||
|
|
||
| IF ($project -is [system.string]) | ||
| { | ||
| CommandLineExecution $installPath $package $project | ||
| } | ||
| ELSE | ||
| { | ||
| VSExecution $installPath $package $project | ||
| } |
| @@ -0,0 +1,63 @@ | ||
| param($installPath, $toolsPath, $package, $project) | ||
|
|
||
| # Visual Studio execution done via NuGet Package Manager | ||
| Function VSExecution($toolsPath, $project) | ||
| { | ||
|
|
||
|
|
||
| $project.DTE.ExecuteCommand("File.SaveAll", [system.string]::Empty) | ||
|
|
||
| # Get the msbuild version of the project and add the import | ||
| $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 | ||
|
|
||
| # now remove our property that points to this package path, "WebGreaseLibPath" | ||
| foreach ($property in $msbuild.Properties) | ||
| { | ||
| if ($property.Name -eq "WebGreaseLibPath") | ||
| { | ||
| $propertyToRemove = $property | ||
| } | ||
| } | ||
|
|
||
| if ($propertyToRemove -ne $null) | ||
| { | ||
| $propertyToRemove.Project.RemoveProperty($propertyToRemove) | ||
| $project.Save() | ||
| } | ||
|
|
||
| $project.DTE.ExecuteCommand("File.SaveAll", [system.string]::Empty) | ||
| } | ||
|
|
||
| # Command line execution done by any external tool (For example, NuGetUpdater) | ||
| # $project - parameter value is path to Project file in this case. | ||
| Function CommandLineExecution($toolsPath, $project) | ||
| { | ||
| [Reflection.Assembly]::LoadWithPartialName("System.Xml") | ||
| [Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") | ||
|
|
||
|
|
||
|
|
||
| $projXDoc = [System.Xml.Linq.XDocument]::Load($project) | ||
| $defaultNameSpace = $projXDoc.Root.GetDefaultNamespace() | ||
| $xmlReader = $projXDoc.CreateReader() | ||
| $namespaceManager = new-object System.Xml.XmlNamespaceManager($xmlReader.NameTable) | ||
| $namespaceManager.AddNamespace("my", $defaultNameSpace.NamespaceName) | ||
|
|
||
| $msnRfPackageElement = [System.Xml.XPath.Extensions]::XPathSelectElement($projXDoc.Root, "//my:WebGreaseLibPath", $namespaceManager) | ||
| if($msnRfPackageElement -ne $null) | ||
| { | ||
| $msnRfPackageElement.Remove() | ||
| } | ||
|
|
||
| # save the project | ||
| $projXDoc.Save($project) | ||
| } | ||
|
|
||
| IF ($project -is [system.string]) | ||
| { | ||
| CommandLineExecution $toolsPath $project | ||
| } | ||
| ELSE | ||
| { | ||
| VSExecution $toolsPath $project | ||
| } |