hor*_*rgh 9 c# entity-framework .net-core dotnet-cli
我们有一个使用DbContextfrom 的简单netcore 2.2控制台应用程序Microsoft.EntityFrameworkCore。从控制台启动后,它可以按预期工作。
但是,我们决定将其用作dotnet CLI工具。.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>
Run Code Online (Sandbox Code Playgroud)
我们使用将其打包到我们的Nuget服务器dotnet pack。然后在目标文件夹中,有以下.csproj文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<DotNetCliToolReference Include="DbUpdater" Version="1.0.1" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
从此文件夹中,将其还原并执行:
dotnet restore
dotnet dbupdate
Run Code Online (Sandbox Code Playgroud)
突然之间,在DbSet的ToList方法调用中,我们收到:
System.Data.SqlClient is not supported on this platform
Run Code Online (Sandbox Code Playgroud)
毫无疑问,将其作为dotnet CLI工具启动时存在问题。但是,我们仍然没有得到这个问题的含义和解决方法。在网络上搜索并没有给我们任何尝试的思路。
Ami*_*rzi -1
请注意,该ToList()方法会触发 SQL 命令,例如,第一次使用相应的 DLL 时。因此,您的错误只是表明 There's a dependency mismatch for Microsoft.EntityFrameworkCore.SqlServeror System.Data.SqlClient,您知道第二个是第一个的依赖项。第二个也有一些依赖性,但我认为你的问题不是来自它。
打包后检查默认参考(版本)并尝试更改为合适的参考(版本)。不幸的是,我们无法重现您的问题,因此请尝试此解决方案并让我们知道结果。
编辑
打包项目的 NuGet 依赖项已添加到 .nuspec 文件中,因此在安装包时可以正确解析它们。项目到项目的引用未打包在项目内。目前,如果您具有项目与项目之间的依赖关系,则每个项目都必须有一个包。
默认情况下,Web 项目不可打包。要覆盖默认行为,请将
<IsPackable>true</IsPackable>属性(内部<PropertyGroup>)添加到.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>
Run Code Online (Sandbox Code Playgroud)
另外,不再需要dotnet restore根据dotnet-pack 文档中的以下内容使用:
从 .NET Core 2.0 开始,您不必运行它,
dotnet restore因为它由所有需要进行还原的命令(例如dotnet build和dotnet run)隐式运行。在某些进行显式恢复有意义的情况下,它仍然是有效的命令。
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |