如果我将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:无法加载文件或程序集 &#39; MySql.Data,Version = 6.9.5.0,Culture = neutral, 公钥= c5687fc88969c44d&#39;或其中一个依赖项。该 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT异常:0x80131040) 文件名:&#39; MySql.Data,Version = 6.9.5.0,Culture = neutral,PublicKeyToken = c5687fc88969c44d&#39; 在System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly) locationHint,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder, Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks) 在System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly) locationHint,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder, Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks) 在System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence assemblySecurity,RuntimeAssembly reqAssembly, StackCrawlMark&安培; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks) 在System.Reflection.Assembly.Load(AssemblyName assemblyRef) 在System.Data.Metadata.Edm.MetadataAssemblyHelper.SafeLoadReferencedAssembly(AssemblyName) 的AssemblyName) 在System.Data.Metadata.Edm.MetadataAssemblyHelper.d__8.MoveNext() 在System.Data.Metadata.Edm.DefaultAssemblyResolver.GetAllDiscoverableAssemblies() 在System.Data.Metadata.Edm.DefaultAssemblyResolver.GetWildcardAssemblies() at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName,String resourceName,ICollection
1 uriRegistry, MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection
1 uriRegistry,MetadataArtifactAssemblyResolver resolver) 在System.Data.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck,String validExtension,ICollection1 uriRegistry, MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths) at System.Data.Common.Utils.Memoizer
2.&lt;&gt; c__DisplayClass4_0.b__0() 在System.Data.Common.Utils.Memoizer2.Result.GetValue() at System.Data.Common.Utils.Memoizer
2.评估(TArg arg) 在System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(布尔值 initializeAllCollections) 在System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection() 在System.Data.Objects.ObjectContext..ctor(EntityConnection连接,布尔isConnectionConstructor) 在Panola.Data.Models.PanolaDB..ctor() 在Panola.Data.Services.PanolaConfigurator..ctor(String Name,Boolean UseDefualtRepositories) at Panola.Data.Services.PanolaConfigurator..ctor(String Name) at Panola.Tools.Configurator.MainForm.connectToolStripMenuItem_Click(Object 发件人,EventArgs e) 在System.Windows.Forms.ToolStripItem.RaiseEvent(Object key,EventArgs e) 在System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) 在System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) 在System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) 在System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType符合) 在System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e,ToolStripItemEventType met) 在System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) 在System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea) 在System.Windows.Forms.Control.WmMouseUp(消息&amp; m,MouseButtons按钮,Int32点击) 在System.Windows.Forms.Control.WndProc(消息&amp; m) 在System.Windows.Forms.ScrollableControl.WndProc(消息&amp; m) 在System.Windows.Forms.ToolStrip.WndProc(消息&amp; m) 在System.Windows.Forms.ToolStripDropDown.WndProc(消息&amp; m) 在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m) 在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp; m) 在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
答案 0 :(得分:5)
这里的问题是装配绑定;它尝试多个位置,包括本地文件夹和GAC。很难抑制这一点。但是,我怀疑这里最好的选择是在配置文件中添加一个程序集绑定重定向,以告诉&#34; fusion&#34;允许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>