首页 > 解决方案 > 在同一解决方案中使用 EFCore 2 和 EFCore 3。项目没有使用正确的版本

问题描述

我的解决方案中有 3 个项目:

Data.Mysql、Data.Progress 和 MainProject

MainProject 使用 Data.MySQl 和 Data.Progress。

Data.MySQL 使用 Pomero-Provider 和 EFCore 3.11

Data.Progress 使用 OpenEdge-Provider 和 EFCore 2.1.11

问题是 Data.Progress 尝试使用 EFCore 3.11 DLL。

首先我注意到在输出文件夹中只创建了 3.11 DLL。

我的第一个更改是添加 DestinationSubDirectory 以分隔两个项目并将它们放入子文件夹中:

<ProjectReference Include="..\Data.MySQL\Data.MySql.csproj">
  <Project>{050aeca0-c549-43b9-9fed-2cb3311a7239}</Project>
  <Name>Data.MySQL</Name>
  <DestinationSubDirectory>Data.MySQL\</DestinationSubDirectory>
</ProjectReference>
<ProjectReference Include="..\Data.Progress\Data.Progress.csproj">
  <Project>{c8972134-c3bf-4fab-9a35-7d496f464a14}</Project>
  <Name>Data.Progress</Name>
  <DestinationSubDirectory>Data.Progress\</DestinationSubDirectory>
</ProjectReference>

以及将其添加到 App.config

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="Data.MySql;Data.Progress" />
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.EntityFrameworkCore" culture="neutral" publicKeyToken="c5687fc88969c44d"/>
            <bindingRedirect oldVersion="0.0.0.0-2.1.14.99999" newVersion="2.1.11"/>
            <bindingRedirect oldVersion="3.0.0.0-3.2.0.0" newVersion="3.1.9"/>
            <codeBase version="2.1.11" href="Progress\Microsoft.EntityFrameworkCore.dll" />
            <codeBase version="3.1.9"  href="MySql\Microsoft.EntityFrameworkCore.dll" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

一个问题是 Data.Progress 没有在 Data.Progress 文件夹中创建 EFCore DLL。所以我手动将正确的复制到文件夹中。

使用 Data.Progress 时,我尝试手动加载 DLL:

        string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "/Microsoft.EntityFrameworkCore.dll";
        Assembly.LoadFile(path);

但 Data.Progress 仍在尝试使用 EFCore 3.1 DLL!我可以更改哪些内容以使用正确的 EFCore 版本?我认为它只是尝试使用最新的加载版本。我可以以某种方式强迫它吗?

最好的问候克里斯托弗

标签: c#visual-studioentity-framework-core

解决方案


推荐阅读