FluentMigrator 在由于错误的程序集绑定而想要迁移时抛出

The FluentMigrator throws when want to migrate due to wrong assembly binding

提问人:Szyszka947 提问时间:8/19/2023 最后编辑:Szyszka947 更新时间:8/19/2023 访问量:59

问:

我在 NET7 中使用 FluentMigrator,并想迁移我的迁移。我使用:

dotnet tool install -g FluentMigrator.DotNet.Cli

我已经运行了命令:

dotnet fm migrate -a Conversations.API.dll -p postgres -c "omitted"

未处理的异常。System.IO.FileNotFoundException:无法加载文件或程序集 我得到了:

“System.Runtime,版本 = 7.0.0.0,区域性 = 中性,PublicKeyToken=b03f5f7f11d50a3a”。系统找不到指定的文件。 文件名:“System.Runtime,Version=7.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”

当我使用标志时,我得到异常,如下所示:--allowDirtyAssemblies

// Wrong assembly binding redirects for System.Runtime, loading it from disk anyway. pathomitted/System.Runtime.dll
// Wrong assembly binding redirects for Google.Protobuf, loading it from disk anyway. pathomitted/Google.Protobuf.dll
Unhandled exception. System.TypeLoadException: Could not load type 'Google.Protobuf.IBufferMessage' from assembly 'Google.Protobuf, Version=3.5.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604'.

这是我的:.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>net7.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Dapper" Version="2.0.151" />
        <PackageReference Include="FluentMigrator" Version="3.3.2" />
        <PackageReference Include="FluentMigrator.Console" Version="3.3.2" />
        <PackageReference Include="FluentMigrator.Runner.Postgres" Version="3.3.2" />
        <PackageReference Include="Grpc.AspNetCore" Version="2.55.0" />
        <PackageReference Include="Npgsql" Version="7.0.4" />
        <PackageReference Include="PasetoBearer.Authentication" Version="2.0.0" />
        <PackageReference Include="StackExchange.Redis" Version="2.6.122" />
    </ItemGroup>

    <ItemGroup>
        <Protobuf Include="Protos\get_conversations.proto" GrpcServices="Server" />
    </ItemGroup>

    <ItemGroup>
        <Protobuf Include="Protos\get_conversation_messages.proto" GrpcServices="Server" />
    </ItemGroup>

</Project>

为什么会这样?

C# Fluent-Migrator

评论


答:

0赞 Carypalmer 8/19/2023 #1

乍一看,我假设您的一个元素需要更新,或者您在不调整程序集绑定重定向的情况下进行了更新?

评论

0赞 Szyszka947 8/19/2023
说“元素”时,您的意思是NuGet包?我不知道什么是程序集绑定重定向。我将编辑我的问题并添加..csproj
0赞 Carypalmer 8/19/2023
由于你使用的是 Grpc.AspNetCore,因此它可能会将特定版本的 Google.Protobuf 作为依赖项拉取。您可能需要将 Google.Protobuf 包引用显式添加到您的项目中,并确保它使用的是兼容版本。
0赞 Carypalmer 8/19/2023
<PackageReference include=“Google.Protobuf” version=“[latest_version]” />
0赞 Szyszka947 8/19/2023
我有 8 个包,它有 30 个传递包(用作这 8 个包的依赖项的包)。你认为这是解决这个问题的正确方法吗?每 30 个依赖项安装一次?
0赞 Szyszka947 8/20/2023
好的,我做到了,但仍然不起作用。抛出相同的异常