Roslyn:在CoreCLR上加载System.Data.SqlClient(本机dll错误)

时间:2018-06-26 10:39:25

标签: c# .net-core native roslyn

我在.NET 4.7.1下有一个现有代码,该代码添加了System.Data.SqlClient作为Roslyn的引用,因此可以从我们的脚本中使用它。 我无法将此代码移植到.NET Core 2.0。

这是.NET 4.7.1代码:

var references = new[]{
        Assembly.LoadFile(@"{MY_NUGET_PATH}\System.Data.SqlClient.4.4.0\lib\net461\System.Data.SqlClient.dll"),
};

var options = Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default
    .AddReferences(references)
    .WithEmitDebugInformation(true)
    .WithMetadataResolver(Microsoft.CodeAnalysis.Scripting.ScriptMetadataResolver.Default);

var code = @"var tv = new System.Data.SqlClient.SqlConnection(""data source=(localDb)\\mssqllocaldb;initial catalog=plutty;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"");
            tv.Open();
           ";

var roslynScript = CSharpScript.Create(code, options);

roslynScript.RunAsync().Wait();

Roslyn能够编译和运行此脚本并打开连接。 如果我在.NET Core下执行该操作并加载相应的dll,则可以编译,但出现运行时错误。 这是.NET Core代码:

var references = new[]{
        Assembly.LoadFile(@"{MY_NUGET_PATH}\System.Data.SqlClient.4.4.0\lib\netstandard2.0\System.Data.SqlClient.dll"),
        Assembly.LoadFile(@"{MY_NUGET_PATH}\System.Data.SqlClient.4.4.0\runtimes\win\lib\netstandard2.0\System.Data.SqlClient.dll"),
};

var options = Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default
    .AddReferences(references)
    .WithEmitDebugInformation(true)
    .WithMetadataResolver(Microsoft.CodeAnalysis.Scripting.ScriptMetadataResolver.Default);

var code = @"var tv = new System.Data.SqlClient.SqlConnection(""data source=(localDb)\\mssqllocaldb;initial catalog=plutty;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"");
            tv.Open();
           ";

var roslynScript = CSharpScript.Create(code, options);

roslynScript.RunAsync().Wait();

在.NET Core 2.0下,我得到一个运行时异常(调用Open时),找不到sni.dll。 当我安装runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0 nuget程序包并尝试加载sni.dll时,我收到了Bad IL format异常,因为它不是托管dll。

有人可以帮助您将这段代码从完整框架移植到.NET Core吗?

0 个答案:

没有答案