Search code examples
c#sqliteentity-framework-core.net-6.0blazor-webassembly

How do I fix the error "The specified deps.json [] does not exist" for a .NET 6 Web Assembly app using EF and SQLite?


I am building a NET 6 Blazor Web Assembly application using Entity Framework and SQLite. When I attempt to add the initial migration to the database, I get the error "The specified deps.json [C:\git\ThePlayer\ThePlayer\Client\bin\Debug\net6.0\ThePlayer.Client.deps.json] does not exist"

I have the following references in my client (WASM) project:

  <ItemGroup>    
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.12" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.12" PrivateAssets="all" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="6.0.12" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.12">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.3" />
  </ItemGroup>

This is the github repo with the all the code: https://github.com/tysongibby/ThePlayer

Getting the following warnings in the output when I rebuild the project:

Rebuild started...
1>------ Rebuild All started: Project: ThePlayer.Shared, Configuration: Debug Any CPU ------
Restored C:\git\ThePlayer\ThePlayer\Server\ThePlayer.Server.csproj (in 43 ms).
Restored C:\git\ThePlayer\ThePlayer\Client\ThePlayer.Client.csproj (in 44 ms).
Restored C:\git\ThePlayer\ThePlayer\Shared\ThePlayer.Shared.csproj (in 43 ms).
1>ThePlayer.Shared -> C:\git\ThePlayer\ThePlayer\Shared\bin\Debug\net6.0\ThePlayer.Shared.dll
2>------ Rebuild All started: Project: ThePlayer.Client, Configuration: Debug Any CPU ------
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning : Found a native function (sqlite3_config) with varargs in e_sqlite3. Calling such functions is not supported, and will fail at runtime. Managed DllImports: 
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_config_none(System.Int32) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_config_int(System.Int32, System.Int32) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_config_int_arm64cc(System.Int32, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.Int32) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_config_log(System.Int32, System.IntPtr, SQLitePCL.hook_handle) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_config_log_arm64cc(System.Int32, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, SQLitePCL.hook_handle) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning : Found a native function (sqlite3_db_config) with varargs in e_sqlite3. Calling such functions is not supported, and will fail at runtime. Managed DllImports: 
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_db_config_charptr(SQLitePCL.sqlite3, System.Int32, System.Byte*) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_db_config_charptr_arm64cc(SQLitePCL.sqlite3, System.Int32, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.Byte*) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_db_config_int_outint(SQLitePCL.sqlite3, System.Int32, System.Int32, System.Int32*) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_db_config_int_outint_arm64cc(SQLitePCL.sqlite3, System.Int32, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.Int32, System.Int32*) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_db_config_intptr_int_int(SQLitePCL.sqlite3, System.Int32, System.IntPtr, System.Int32, System.Int32) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\6.0.12\Sdk\WasmApp.Native.targets(244,5): warning :     System.Int32 sqlite3_db_config_intptr_int_int_arm64cc(SQLitePCL.sqlite3, System.Int32, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr, System.Int32, System.Int32) (in [SQLitePCLRaw.provider.e_sqlite3] SQLitePCL.SQLite3Provider_e_sqlite3+NativeMethods)
2>Compiling native assets with emcc. This may take a while ...
2>[1/3] pinvoke.c -> pinvoke.o [took 0.38s]
2>[2/3] corebindings.c -> corebindings.o [took 0.46s]
2>[3/3] driver.c -> driver.o [took 0.56s]
2>Linking with emcc. This may take a while ...
2> "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\bin\wasm-ld.exe" -o C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\dotnet.wasm C:\Users\tyson.LAPPY9000\.nuget\packages\sqlitepclraw.lib.e_sqlite3\2.1.3\buildTransitive\net6.0\..\..\runtimes\browser-wasm\nativeassets\net6.0\e_sqlite3.a C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\pinvoke.o C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\driver.o C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\corebindings.o "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libicui18n.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libicuuc.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmono-component-debugger-static.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmono-component-diagnostics_tracing-stub-static.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmono-component-hot_reload-static.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmono-ee-interp.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmono-icall-table.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmono-ilgen.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmono-profiler-aot.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libmonosgen-2.0.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libSystem.IO.Compression.Native.a" "C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\6.0.12\runtimes\browser-wasm\native\libSystem.Native.a" "-LC:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libgl.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libal.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libhtml5.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libc.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libcompiler_rt.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libc++.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libc++abi.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libdlmalloc.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libc_rt_wasm.a" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\cache\sysroot\lib\wasm32-emscripten\libsockets.a" -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined --export putchar --export stackSave --export stackRestore --export stackAlloc --export __wasm_call_ctors --export __errno_location --export malloc --export free --export __cxa_is_pointer_type --export __cxa_can_catch --export setThrew --export _get_tzname --export _get_daylight --export _get_timezone --export memalign --export memset --export emscripten_main_thread_process_queued_calls --export ntohs --export htons --export htonl --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-table -z stack-size=5242880 --initial-memory=536870912 --no-entry --max-memory=2147483648 --global-base=1024
2> "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\bin\wasm-emscripten-finalize" --minimize-wasm-changes -g --dyncalls-i64 --dwarf C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\dotnet.wasm -o C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\dotnet.wasm --detect-features
2> "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Node.win-x64\6.0.12\tools\bin\node.exe" "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\emscripten\src\compiler.js" C:\Users\TYSON~1.LAP\AppData\Local\Temp\tmppxf580an.txt
2> "C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.12\tools\bin\llvm-objcopy.exe" C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\dotnet.wasm C:\git\ThePlayer\ThePlayer\Client\obj\Debug\net6.0\wasm\for-build\dotnet.wasm --remove-section=producers
2>Optimizing dotnet.wasm ...
2>ThePlayer.Client -> C:\git\ThePlayer\ThePlayer\Client\bin\Debug\net6.0\ThePlayer.Client.dll
2>ThePlayer.Client (Blazor output) -> C:\git\ThePlayer\ThePlayer\Client\bin\Debug\net6.0\wwwroot
2>Done building project "ThePlayer.Client.csproj".
3>------ Rebuild All started: Project: ThePlayer.Server, Configuration: Debug Any CPU ------
3>ThePlayer.Server -> C:\git\ThePlayer\ThePlayer\Server\bin\Debug\net6.0\ThePlayer.Server.dll
========== Rebuild All: 3 succeeded, 0 failed, 0 skipped ==========
========== Elapsed 00:18.020 ==========

Solution

  • I opened a ticket with the Entity Framework team and they provided this work-around for the issue:

    The workaround is to create a separate console application project in the solution. This project is used only to enable the EF tools to create an appropriate context instance. The project needs to reference the project containing your DbContext and the EF Core database provider you are using. For example:

    <Project Sdk="Microsoft.NET.Sdk">
    
        <PropertyGroup>
            <OutputType>Exe</OutputType>
            <TargetFramework>net6.0</TargetFramework>
            <ImplicitUsings>enable</ImplicitUsings>
            <Nullable>enable</Nullable>
        </PropertyGroup>
    
        <ItemGroup>
            <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="6.0.12" />
            <PackageReference Include="SQLitePCLRaw.core" Version="2.1.3" />
            <PackageReference Include="SQLitePCLRaw.lib.e_sqlite3" Version="2.1.3" />
            <PackageReference Include="SQLitePCLRaw.provider.e_sqlite3" Version="2.1.3" />
        </ItemGroup>
    
        <ItemGroup>
          <ProjectReference Include="..\ThePlayer\Shared\ThePlayer.Shared.csproj" />
        </ItemGroup>
    
    </Project>
    

    The console application needs to have an IDesignTimeDbContextFactory. Something like this:

    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Design;
    using ThePlayer.Shared.Data.Context;
    
    Console.WriteLine("Hello, World!");
    
    public class ContextFactory : IDesignTimeDbContextFactory<ThePlayerContext>
    {
        public ThePlayerContext CreateDbContext(string[] args) 
            => new(null, new DbContextOptionsBuilder<ThePlayerContext>().UseSqlite(args[0]).Options);
    }
    

    This can then be used to generate migrations from the command line. For example:

    PS C:\local\code\repros\ThePlayer-master\ThePlayer-master\ConsoleApp1> dotnet ef migrations add One --project ..\ThePlayer\Shared\ThePlayer.Shared.csproj -- "DataSource=ThePlayer.db"
    Build started...
    Build succeeded.
    Done. To undo this action, use 'ef migrations remove'
    PS C:\local\code\repros\ThePlayer-master\ThePlayer-master\ConsoleApp1>
    

    source: How do generate migrations for an Blazor WASM