1

如果我将 MySql.Data.dll 程序集与可执行文件放在同一个文件夹中,我有一个 .NET 应用程序会崩溃,但如果我移动它就可以正常工作。同一文件夹中的不同可执行文件依赖于它,因此我需要将其保留在那里。

我该怎么做才能让应用忽略这个 dll?我假设我可以编辑配置文件,但我似乎找不到任何人有忽略本地 .dll 的问题,所以我不知道该写什么。

更让我困惑的是异常细节中写的关于加载程序集的部分。请注意,本地文件夹中的文件(我想忽略的那个)的版本是 6.9.9.0,异常状态是它要加载 6.9.5.0,而加载的文件(来自 GAC)是 6.9.8.0。

这是我的配置文件:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
        <add name="DB" connectionString="*" providerName="System.Data.EntityClient" />
    </connectionStrings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

非常感谢您的帮助。

************** Loaded Assemblies **************
---------------------------------------
MySql.Data
    Assembly Version: 6.9.8.0
    Win32 Version: 6.9.8.0
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/MySql.Data/v4.0_6.9.8.0__c5687fc88969c44d/MySql.Data.dll
----------------------------------------

************** 异常文本 **************

System.IO.FileLoadException:无法加载文件或程序集“MySql.Data,Version=6.9.5.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)文件名:'MySql.Data,版本 = 6.9.5.0,文化 = 中性,PublicKeyToken = c5687fc88969c44d'在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName 文件名,字符串代码库,证据 assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity,1 uriRegistry, MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection1 uriRegistry,MetadataArtifactAssemblyResolver 解析器)在 System.Data.Metadata.Edm.MetadataArtifactLoader.Create(字符串路径,ExtensionCheck extensionCheck,字符串 validExtension,ICollection 1 uriRegistry, MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths) at System.Data.Common.Utils.Memoizer2.<>c__DisplayClass4_0.b__0() 在 System.Data.Common.Utils.Memoizer2.Result.GetValue() at System.Data.Common.Utils.Memoizer2.Evaluate(TArg arg) at System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections) at System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection() at System.Data.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor ) 在 Panola.Data.Services.PanolaConfigurator..ctor(String Name) 在 Panola.Data.Services.PanolaConfigurator..ctor(String Name, Boolean UseDefualtRepositories) 在 Panola.Data.Models.PanolaDB..ctor()。 Tools.Configurator.MainForm.connectToolStripMenuItem_Click(Object sender, EventArgs e) 在 System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) 在 System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) 在 System.Windows。形式。ToolStripItem.HandleClick(EventArgs e) 在 System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) 在 System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met) 在 System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met) at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 点击)在 System.Windows.Forms.ScrollableControl.WndProc(Message& m) 的 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ToolStrip.WndProc(Message& m) 在 System.Windows。 Forms.ToolStripDropDown。WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd , Int32 msg, IntPtr wparam, IntPtr lparam)

4

1 回答 1

5

这里的问题是程序集绑定;它会尝试多个位置,包括本地文件夹和 GAC。很难抑制这一点。然而,我怀疑这里最好的选择是在配置文件中添加一个程序集绑定重定向,告诉“fusion”允许 6.9.9.0 代替以前的版本。例如:

  <dependentAssembly>
    <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" />
    <bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
  </dependentAssembly>
于 2016-07-21T09:13:04.553 回答