使用ServiceStack.OrmLite.Core包(5.4.1)并尝试通过执行以下操作获取ModelDefinitionServiceStack.OrmLite.ModelDefinition )时出现运行时错误:

var model = ModelDefinition<T>.Definition; 

错误如下:

System.IO.FileLoadException: 'Could not load file or assembly 'System.ComponentModel.Annotations, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)' 

我试图安装nuget System.ComponentModel.Annotations(自4.2.0.0以来4.5.0.0不可用)无济于事。 我遇到System.IO.FileLoadException时也尝试了各种修复 ,但没有任何效果。

该项目是.Net Framework 4.7.1项目,但.Net标准项目包含在解决方案中,因此我需要运行ServiceCack.OrmLite的.Core版本。

我在两个工作区(两个独立的机器)上尝试了这个,(1)如上所述,以及(2)解决方案中没有.Net标准项目。 在(2)机器上,它在运行非核心版本的ServiceStack.OrmLite ,但切换到ServiceStack.OrmLite.Core会发生运行时错误。

有没有人有任何想法?

===============>>#1 票数:2 已采纳

最终我发现了......

事实证明, ServiceStack.OrmLite.MySql.Core需要System.ComponentModel.Annotations版本4.2.0.0作为错误消息明确说明。 通常它可以安装一个等于或大于所需版本的版本,但在这种情况下,没有一个工作。 由于某种原因,似乎FX中包含的最新版本是4.0.0.0(或者至少是我在其中包含它的汇编版本时得到的。)还有一个nuget安装版本4.5.0.0,但结果是相同。

我不知道为什么它使用FX版本的ServiceStack.OrmLite.MySql开箱即用,但是当我像我一样使用Core版本时,如果没有以下修复,我发现无法避免这种情况:

在我的启动项目中,我需要添加一个程序集绑定,告诉ServiceStack.OrmLite.MySql.CoreSystem.ComponentModel.Annotations版本4.2.0.0“重定向”到4.0.0.0(同一程序集)。 它看起来像这样:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">     <dependentAssembly>         <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />         <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.0.0.0" />      </dependentAssembly>  </assemblyBinding> 

我确信那里有人可以解释这方面的细节,我不是其中之一,但是仍然......将它添加到启动项目app.config就可以了。

  ask by Erik Lindberg translate from so

===============>>#2 票数:1

在尝试重新编写此问题时,我解决了.NET Framework模板上ASP.NET核心应用程序的另一个问题,该模板引用了最新的v5.4.1 MyGet软件包 ,其中测试.csproj应该引用新的ServiceStack.Kestrel.Core软件包而不是of ServiceStack.Kestrel ,i,e:

<PackageReference Include="ServiceStack.Kestrel.Core" Version="5.*" /> 

现在更新了所有.Core模板。 要在MyGet上访问最新的v5.4.1软件包,您需要清除NuGet软件包缓存:

$ nuget locals all -clear 

然后使用新的web .NET Core工具安装最新的web-corefix项目:

$ dotnet tool install --global web  $ web new web-corefx WebCoreFx 

然后我在WebCoreFx.csproj添加了对OrmLite MySql的WebCoreFx.csproj

<PackageReference Include="ServiceStack.OrmLite.MySql.Core" Version="5.*" /> 

并更新了Startup.cs以注册MySql提供程序,从表简单表创建和选择并访问其ModelDefinition<T>.Definition API:

class Person {     public int Id { get; set; }     public string Name { get; set; } }  public override void Configure(Container container) {     SetConfig(new HostConfig {         DefaultRedirectPath = "/metadata",         DebugMode = AppSettings.Get(nameof(HostConfig.DebugMode), false)     });      container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(         "Server=localhost;Database=test;UID=root;Password=test;SslMode=none",         MySqlDialect.Provider));      using (var db = container.Resolve<IDbConnectionFactory>().OpenDbConnection())     {         db.DropAndCreateTable<Person>();          db.Insert(new Person {Id = 1, Name = "Name"});          var s = db.Select<Person>().Dump();         s.PrintDump();     }      var model = ModelDefinition<Person>.Definition;     model.Name.Print(); } 

哪个工作按预期运行并且没有问题。

如果你仍然有问题,你可以在GitHub上传一个MCVE我可以在本地运行以重现问题。

  ask by Erik Lindberg translate from so

===============>>#3 票数:0

我遇到了这个问题,并且不支持与SqlClient相关的其他问题。 确保常规.net应用程序设置为使用PackageReference而不是packages.config。 如果不迁移它。 这解决了我的问题,而不必放入一堆绑定重定向。

  ask by Erik Lindberg translate from so

本文未有回复,本站智能推荐: