Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获得;此平台不支持System.Data.SqlClient“;作为dotnet cli工具启动时_C#_Entity Framework_.net Core_Dotnet Cli - Fatal编程技术网

C# 获得;此平台不支持System.Data.SqlClient“;作为dotnet cli工具启动时

C# 获得;此平台不支持System.Data.SqlClient“;作为dotnet cli工具启动时,c#,entity-framework,.net-core,dotnet-cli,C#,Entity Framework,.net Core,Dotnet Cli,我们有一个简单的netcore 2.2控制台应用程序,使用Microsoft.EntityFrameworkCore中的DbContext。当按原样从控制台启动时,它会按预期工作 然而,我们决定将其作为一种工具。它的.csproj文件包含: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramew

我们有一个简单的netcore 2.2控制台应用程序,使用Microsoft.EntityFrameworkCore中的
DbContext
。当按原样从控制台启动时,它会按预期工作

然而,我们决定将其作为一种工具。它的.csproj文件包含:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AssemblyName>dotnet-dbupdate</AssemblyName>
    <Title>Db Updater</Title>
    <Version>1.0.1</Version>
    <PackageId>DbUpdater</PackageId>
    <Product>DbUpdater</Product>
    <PackageVersion>1.0.1</PackageVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
  </ItemGroup>
</Project>
从该文件夹中,我们将其还原并执行:

dotnet restore
dotnet dbupdate
突然,在
DbSet
ToList
方法调用中,我们收到:

System.Data.SqlClient is not supported on this platform
作为dotnet CLI工具启动它肯定存在问题。然而,我们没有弄清楚这个问题是什么以及如何解决它。在web上搜索并没有给我们任何尝试的想法。

请注意,
ToList()
方法会触发SQL命令,比如说,在他第一次使用相应的DLL时。所以,简单地说,您的错误是存在对的依赖项不匹配,或者,您知道第二个是对第一个的依赖项。第二个也有一些依赖关系,但是我认为你的问题不是来自它

打包后检查默认参考(版本),并尝试更改为合适的参考。不幸的是,我们无法重现您的问题,因此请尝试此解决方案并让我们知道结果

编辑

根据:

打包项目的NuGet依赖项被添加到.nuspec中 文件,以便在安装包时正确解析。 项目到项目的引用不打包在项目中。 目前,如果有,每个项目必须有一个包 项目之间的依赖关系

默认情况下,Web项目不可打包。覆盖默认值的步骤 行为,添加
true
属性(内部
)添加到.csproj文件中

我认为您需要在
.csproj
文件中包含以下内容:

<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.4.0"/>
</ItemGroup>

此外,无需再使用
dotnet restore
,该恢复基于以下内容:

从.NET Core 2.0开始,您不必运行
dotnet restore
因为它由所有命令隐式运行,例如
dotnetbuild
dotnet运行
,需要进行还原。它仍然是有效的 在某些情况下执行显式还原会导致 理智


尝试指定用于CLI的.NET版本:

dotnetdbupdate--fx版本2.2.4

如果上述方法不起作用,请尝试使用已安装的其他版本(2.2.2)


本质上,用于从CLI运行的.NET版本、console应用程序的目标SDK和依赖项的包版本都必须匹配以避免不兼容问题。

如果您正在使用Asp.NET core 2.2开发项目,请注意以下问题

当您更改目标项目设置(启动设置为cli)或类型(as class lib为标准lib)或从nuget节中删除某些双属性时,编译器无法将dll文件移动到目标文件夹。(编译器错误和microsoft在vs 2019上2修订版中更正了此问题)您可以尝试手动移动它,但不能保证。在这种情况下,降级可能是一种结果

Asp.net framework核心编译器主要查看项目文件,其他引用模块的优先级较低。
dotnet restore和dotnet update
无法根据我们的更改提供设置。例如,如果在查看visual studio的nuget dependecy部分后,删除了一个包并执行了
-dotnet restore
命令。他们可能还在那里。 因此,您尝试将Microsoft.EntityFrameworkCore.SqlServer放置到最终项目的最终文件中

具有上述功能的解决方案

独立的应用程序。 在这种情况下,如果您正在使用与另一个应用程序(如SQLBase驱动程序)相关的DLL,或者您可以通过隔离这些DLL将其他nuget依赖项放到应用程序中。这使您能够灵活地使用系统中的其他资源。在您的情况下,您应该为Microsoft.EntityFrameworkCore.SqlServer执行此操作

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
InProcess

如果您不同意,请写评论

刚刚将兼容性v2添加到local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "FUNCTIONS_V2_COMPATIBILITY_MODE": "true"
  }
}

我遇到了同样的问题,这是因为使用了错误版本的System.Data.SqlClient,在我的例子中,应用程序是使用.NET 4.6和.NET Standard 2.0中的类库构建的,该类库依赖于System.Data.SqlClient。
在生产环境中更换相应版本的System.Data.SqlClient(.NET 4.6,在我的情况下)后,问题得到解决。

如果要在Linux操作系统上运行,请确保使用正确的目标运行时发布解决方案。例如,如果您想在Red Hat Enterprise linux上运行linux-x64,请选择它

在打包之前代码运行正常吗?也就是说,如果你在你的源目录中运行
dotnet run
,或者在你的ide中点击run,我在这篇文章的一开始写道:“当从控制台启动时,一切正常。”啊,是的。抱歉在SqlServer one旁边添加整个entityfw的引用解决了什么问题
@Legion,不幸的是它没有。请您详细描述一下打包后我们如何签出默认引用?horgh在类似
dotnet--info
command和其他一些指南中检查有用的指南。我相信不匹配。您引用的线程是在讨论在不同服务器上启动应用程序的问题。然而,在我的情况下,问题是在同一台机器上。我在一台机器上编译和运行应用程序时没有任何问题,在这台机器上以dotnet cli工具启动应用程序时遇到了这个问题。@horgh我知道,我是说打包后的参考更改。注
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "FUNCTIONS_V2_COMPATIBILITY_MODE": "true"
  }
}