Skip to content

Commit 17b6cb5

Browse files
committed
add SAP HANA 2 SPS04 driver bug workaround
1 parent 5f243f8 commit 17b6cb5

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

Source/DriverHelper.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
using LINQPad.Extensibility.DataContext;
1313
using System.Reflection;
14+
using System.IO;
1415

1516
namespace LinqToDB.LINQPad
1617
{
@@ -190,5 +191,26 @@ public static void ConfigureRedirects()
190191
return typeof(DataContext).Assembly;
191192
};
192193
}
194+
195+
public static void SapHanaSPS04Fixes()
196+
{
197+
// recent SAP HANA provider (SPS04) uses Assembly.GetEntryAssembly() calls during native dlls discovery, which
198+
// leads to NRE as it returns null under NETFX, so we need to fake this method result to unblock HANA testing
199+
// https://github.com/microsoft/vstest/issues/1834
200+
// https://dejanstojanovic.net/aspnet/2015/january/set-entry-assembly-in-unit-testing-methods/
201+
try
202+
{
203+
var assembly = Assembly.GetCallingAssembly();
204+
205+
var manager = new AppDomainManager();
206+
var entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic);
207+
entryAssemblyfield.SetValue(manager, assembly);
208+
209+
var domain = AppDomain.CurrentDomain;
210+
var domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic);
211+
domainManagerField.SetValue(domain, manager);
212+
}
213+
catch { /* ne shmagla */ }
214+
}
193215
}
194216
}

Source/LinqToDBDriver.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class LinqToDBDriver : DynamicDataContextDriver
3131
static LinqToDBDriver()
3232
{
3333
DriverHelper.ConfigureRedirects();
34+
DriverHelper.SapHanaSPS04Fixes();
3435
}
3536

3637
public override string GetConnectionDescription(IConnectionInfo cxInfo)

0 commit comments

Comments
 (0)