You*_*uma 1 .net c# assemblies gac mysql.data
我有一个.NET应用程序崩溃如果我在可执行文件的同一文件夹中有MySql.Data.dll程序集但如果我移动它工作正常.同一文件夹中的不同可执行文件依赖于它,因此我需要将其保留在那里.
我该怎么做才能让应用程序忽略这个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>
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助.
************** 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
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
**************异常文本**************
System.IO.FileLoadException:无法加载文件或程序集MySql.Data,版本= 6.9.5.0,文化=中性公钥= c5687fc88969c44d'或它的一个依赖.定位的程序集的清单定义与程序集引用不匹配.(从HRESULT异常:0x80131040)文件名: 'MySql.Data,版本= 6.9.5.0,文化=中性公钥= c5687fc88969c44d'在System.Reflection.RuntimeAssembly._nLoad(的AssemblyName文件名,字符串的代码库,证据assemblySecurity,RuntimeAssembly locationHint, SystemCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks )System.Reflection.Asombly.Loa的System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence assemblySecurity,RuntimeAssembly reqAssembly,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks).d(AssemblyName assemblyRef)在System.Data.Metadata.Metadata.Eetm.MetadataAssemblyHelper.d__8.MoveNext()的System.Data.Metadata.Edm.MetadataAssemblyHelper.SafeLoadReferencedAssembly(AssemblyName assemblyName)处于System.Data.Metadata.Edm.DefaultAssemblyResolver.GetAllDiscoverableAssemblies(处于System.Data.Metadata.Edm的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, ICollection1 uriRegistry,MetadataArtifactAssemblyResolver resolver)的System.Data.Metadata.Edm.DefaultAssemblyResolver.GetWildcardAssemblies()处. 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)在System.Data.EntityClient.EntityConnection.GetMetadataWorkspace (布尔initializeAllCollections)在System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection()在System.Data.Objects.ObjectContext..ctor(Panola.Data.Services.PanolaConfigurator..ctor(String Name,Boolean UseDefualtRepositories)中的Panola.Data.Models.PanolaDB..ctor()中的EntityConnection连接,布尔isConnectionConstructor),位于Panola.Data.Services.PanolaConfigurator..ctor(String)名称)在Panola.Tools.Configurator.MainForm.connectToolStripMenuItem_Click(对象发件人,EventArgs e)上System.Windows.Forms.ToolStripItem.RaiseEvent(对象键,EventArgs e)上System.Windows.Forms.ToolStripMenuItem.OnClick(E EventArgs的)在System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)上System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)上System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs的,ToolStripItemEventType满足)在System.Windows. Forms.ToolStripItem.FireEvent(EventArgs的,ToolStripItemEventType满足)在System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs MEA)在System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs MEA)在System.Windows.Forms.Control.WmMouseUp (信息& 在System.Windows.Fornd.ToolStrip.WndProc(Message&m)的System.Windows.Forms.ScrollableControl.WndProc(Message&m)的System.Windows.Forms.Control.WndProc(Message&m)处的m,MouseButtons按钮,Int32单击)在System.Windows.Forms.ToolStripDropDown.WndProc在System.Windows.Forms.Control.ControlNativeWindow.OnMessage在System.Windows.Forms.Control.ControlNativeWindow.WndProc在System.Windows(邮件&m)(邮件&m)(邮件&m) .Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
这里的问题是装配绑定; 它尝试多个位置,包括本地文件夹和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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2079 次 |
| 最近记录: |