忽略与可执行文件

时间:2016-07-21 09:08:42

标签: c# .net assemblies gac mysql.data

如果我将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,ICollection 1 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.Memoizer 2.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)

1 个答案:

答案 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>
相关问题