madd0/AzureStorageDriver

Can not compile typed context: Assembly 'Madd0.AzureStorageDriver'

Valtarr opened this issue ยท 13 comments

When trying to connect to Azure TableStorage from LinqPad6 (using nuget driver) I recieve an error:
Error: Can not compile typed context: Assembly 'Madd0.AzureStorageDriver' with identity 'Madd0.AzureStorageDriver, Version 2.1.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Runtime, Version 4.2.2.0, Culture=neutral, ...
In LinqPad5 the same connection is working and I am able to connect using TableStorage driver.
Are there some prerequisites needed? LinqPad is working by itself. And able to connect to SQL.

I saw closed ticked, but the problem seems not solved... Driver version 2.1.0.0

madd0 commented

I had good hope since nobody else had seen the error since the update...
Any chance you have more details after the ...? I'd like to see what version it's looking for.
Also, any information about your environment, especially what version(s) of the .net core runtimes or SDKs you have installed, might help.

Probably not so many TS users ๐Ÿ™ƒ
But believe - when you need to analyze TS content - LinqPad with your driver is like a dream.
Better could be only if it would be able to modify entities and implemented full linq (like .Take(x))

Requested data:
dotnet --version => 3.1.101
LinqPad version: 6.5.5 (x64)
LinqPad "About" info:

.NET Core version (host): 3.1.1
.NET Core version (queries): 3.1.1
Roslyn Version: 3.3.1-beta4-19462-11
FSharp.Compiler.Service version: 32.0.0.0

Info from driver:

Cannot compile typed context: Assembly 'Madd0.AzureStorageDriver' with identity 'Madd0.AzureStorageDriver, Version=2.1.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'System.Runtime' with identity 'System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' (line : (0,0)-(0,0))

Hm... Looks like you are using some Preview SDK (with newer System.Runtime) - as I am using the last stable and have lower version ๐Ÿง

I think using System.Runtime 4.2.1 could solve the issue ๐Ÿค”

madd0 commented

Thanks for the information. I'm running the exact same environment as you are.

.NET Core 3.1 uses System.Runtime 4.2.2. Since the driver itself targets 3.1 and that the generated code references the driver, it will need System.Runtime 4.2.2 in the end anyway.

I do not have reliable reproduction steps, but I did manage to encounter the exception when I opened LinqPad 6 today (I don't use 6 much because I only have a license for 5 and I can't live without autocomplete).

What the debugger is showing me is that, although the driver DLL that was loaded targets .NET Core 3.1, LinqPad is giving it 3.0 DLLs to compile the generated code, which results in the exception you are getting.

I've reached out to the author hoping he'll have an idea of what might be going wrong. I'll also try to investigate further during the course of the weekend.

Thanx for feedback. Hope LinqPad then will be fixed.
The best thing in 6th I think is #link functionality. You should not keep everything useful and reusable in one file ๐Ÿ™ƒ

madd0 commented

Quick update: After exchanging with Joe Albahari, I have a better understanding of what is going wrong. We have discussed of possible improvements in LinqPad to avoid the issue in the future, and I have an idea for a workaround in the meantime. I hope I'll be able to patch and test before the end of the week.

Great news! :)

I updated and can confirm it works now.
Good work! Thanx.

Are you going to make .Take(N) and .Skip(N) LinQ methods work?
It would be good to take some data without enumerating full table.

madd0 commented

I'll look into it. In the meanwhile, specifying AsQueryable does the trick. For example:

MyTable.AsQueryable().Take(10)

Calls:

https://xxxxx.table.core.windows.net/MyTable?$top=10

Nice trick. Didn't know :)
However Skip is still not working.

madd0 commented

Ah, right, that's because Skip is not supported by the SDK, afaik ๐Ÿ˜„