5

我已经为 Visual Studio 和 .NET 连接器 (6.7.4.0) 安装了 MySQL。我之前安装了 6.6.5.0。为什么它还在寻找这个 DLL?

System.IO.FileLoadException was unhandled
  HResult=-2146234304
  Message=Could not load file or assembly 'MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  Source=mscorlib
  FileName=MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d
  FusionLog==== Pre-bind state information ===
LOG: User = Vaughan-PC\Vaughan Hilts
LOG: DisplayName = MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d
 (Fully-specified)
LOG: Appbase = file:///C:/Users/Vaughan Hilts/Documents/GitHub/blastersgame/BlastersOnline/LobbyServer/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\Vaughan Hilts\Documents\GitHub\blastersgame\BlastersOnline\LobbyServer\bin\Debug\LobbyServer.vshost.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d
LOG: Attempting download of new URL file:///C:/Users/Vaughan Hilts/Documents/GitHub/blastersgame/BlastersOnline/LobbyServer/bin/Debug/MySql.Data.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

  StackTrace:
       at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
       at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
       at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
       at System.Type.GetType(String typeName)
       at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow)
       at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
       at System.Data.Entity.Internal.LazyInternalConnection.CreateConnectionFromProviderName(String providerInvariantName)
       at System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection)
       at System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config)
       at System.Data.Entity.Internal.LazyInternalConnection.Initialize()
       at System.Data.Entity.Internal.LazyInternalConnection.get_ProviderName()
       at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
       at System.Data.Entity.Internal.InternalContext.Initialize()
       at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
       at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
       at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
       at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
       at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
       at LobbyServer.Lobby.Main(String[] args) in c:\Users\Vaughan Hilts\Documents\GitHub\blastersgame\BlastersOnline\LobbyServer\Lobby.cs:line 64
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
4

5 回答 5

13

您可以使用绑定重定向来解决此错误。绑定重定向是一种框架功能,它允许您指示对特定程序集(由版本/公钥令牌等标识)的任何请求都应由该程序集的另一个版本提供服务。

所以你应该在and<dependentAssembly>下添加一个节点。在这里,它应该是这样的;<runtime><assemblyBinding>

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
       <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
       <bindingRedirect oldVersion="6.6.5.0" newVersion="6.7.4.0" />
     </dependentAssembly>
  </assemblyBinding>
</runtime>

请注意publicKeyToken,文化信息可以在异常中找到(代码中出现异常的地方,因为它基于上面的异常信息)。

PS 请记住,如果这些版本之间存在任何实际的接口差异,您最终可能会由于我们期望的不匹配而导致异常,因此请注意这一点,但通常大多数提供商不会破坏主要版本之外的东西,所以我们不会'通常不会看到这样的问题 :)

于 2013-12-12T15:22:58.650 回答
2

在此处插入另一篇文章的答案。问题是 machine.config 包含对 MySql 的早期版本的 dll 的引用(例如 V6.6.5.0)。这些引用是在安装 MySQL Visual Studio add on (uhg) 期间创建的。它们需要重置为正确版本的 dll。

  1. 向项目中添加对正确版本的 MySql.Data 和 MySql.Data.Entity 库的nuget引用。单击 MySQL 引用并确定它们的版本号(例如 6.7.4.0)。
  2. 使用以管理员身份运行的编辑器编辑您的 machine.config 文件*s*,并将所有出现的 MySQL 版本 6.6.5.0 替换为 6.7.4.0。

请注意,有多个 machine.config 文件,请确保将它们全部用于您的配置。

C:\Windows\Microsoft.NET\Framework\\Config 和:C:\Windows\Microsoft.NET\Framework64\\Config

于 2013-10-29T23:25:34.273 回答
1

MySQL.Data 是外部 dll。它不是 .net 框架的一部分。因此,您必须将其添加到您的 bin 或输出文件夹中。如果 dll 存在于 GAC 中,请将其添加到您的项目引用中。

于 2013-07-23T03:01:42.153 回答
0

检查您的 app.config,我认为您引用了一个强名称 mysql.data.dll。

于 2013-07-23T03:20:03.487 回答
0

我不愿将此称为真正的解决方案,但似乎其他版本的 MySQL 存在问题,并且从旧的 .NET 连接器安装程序和 MySQL for Windows 安装程序迁移。最后,当我重新安装 Windows 时,一切正常。对于许多人来说,这并不是一个真正的选择,但如果你厌倦了头痛并且它迟早会出现在 TODO 上 - 考虑一下你的出狱卡

于 2013-12-18T22:05:47.957 回答