web-dev-qa-db-ja.com

Entity FrameworkCoreを使用するWPFアプリケーションの展開

SQLiteデータベースを処理できるように、エンティティフレームワークコアを使用するWPFアプリを構築したいと思います。

次に、たとえば次のことを行います。

  • Visual Studio 2017(15.5.2)を使用して、WPFアプリケーションを作成します。
  • Nugetパッケージマネージャーを開き、Microsoft.EntityFrameworkCore.SqliteMicrosoft.EntityFrameworkCore.Toolsをインストールします。
  • ボタンをMainWindow.xamlにドロップし、xamlが次のようになるようにイベントハンドラーをClickイベントに追加します。
<Window x:Class="WPFEFCoreDeploymentTest.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Click="ButtonBase_OnClick"></Button>
    </Grid>
</Window>
  • 次のコードをファイルの背後にあるコードにドロップしますMainWindow.xaml.cs
namespace WPFEFCoreDeploymentTest
{
    using System.Linq;
    using System.Windows;
    using Microsoft.EntityFrameworkCore;

    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            using (var context = new SomeContext())
            {
                if (context.Database.GetPendingMigrations().Any())
                {
                    context.Database.Migrate();
                }
            }
        }
    }

    public class SomeContext : DbContext
    {
        public DbSet<Test> Tests { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("Data Source=local.db");
        }
    }

    public class Test
    {
        public int Id { get; set; }
    }
}
  • パッケージマネージャーコンソールを使用して、移行スクリプトを作成します。Add-Migration Migration1
  • アプリケーションをビルドして実行する

さて、プロジェクトのbin/Debugフォルダーに移動すると、.NETコアの.NET標準の実装であると思われるDLLがたくさんあることに気付きました(たぶん私は非常に愚かです)。例えば:

  • System.Collections.Immutable.dll
  • System.ComponentModel.Annotations.dll
  • System.Data.Common.dll
  • System.Net.Http.dll
  • リストは続きます

したがって、正しく理解していれば、config app.configにリダイレクトが追加されていない場合、これらの署名されたアセンブリは実行可能ファイルにアクセスできる必要があります。つまり、インストーラーを作成する場合は、これらのアセンブリをアプリケーションと一緒にデプロイする必要があります。ただし、.NET Frameworkはすでにこれらを実装しており、誰かが自分のマシンでWPFアプリケーションを実行する場合は、.NETFrameworkをインストールする必要があります。これは私に不思議に思います:

  1. これらの.netコア実装アセンブリを.netフレームワークの実装に置き換えることはできますか?出来ますか?
  2. 前者の点が技術的に可能である場合、それは機能するべきですか、それともこれはあらゆる種類の問題を引き起こす可能性がありますか?
  3. 不可能な場合、.net framework.net coreの両方を混在させると、アプリケーションによって直接または間接的に参照されるアセンブリの実装が重複する可能性があります(おそらく、私のアプリケーションの他のモジュールは.net framework'sを使用します) System.Net.Http.dllクラスですが、EFコアまたはその依存関係は.net core's System.Net.Http.dllも参照しています)?
10

短い答え:

これらの.netコア実装アセンブリを.netフレームワークの実装に置き換えることはできますか?出来ますか?

いいえ。アプリケーションが.NETCoreで記述されている場合は、できません。また、あなたはすべきではありません。可能であれば、.NETCoreアセンブリを使用したいと思います。

編集:WPFアプリケーションに.NET Frameworkを既に使用しているため、.NET Core実装をアンインストールして、.NETFrameworkをインストールするだけで済みます。ただし、Windows以外のプラットフォームでアプリを使用する場合は、.NETCoreアセンブリを使用する必要があります。

1
Shiriku