Игнорировать сборку.dll в той же папке, что и исполняемый файл
У меня есть приложение.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>
Очень благодарен за любую помощь.
************** 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, версия =6.9.5.0, культура = нейтральная, PublicKeyToken=c5687fc88969c44d' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Имя файла: 'MySql.Data, версия =6.9.5.0, Culture= нейтральный, PublicKeyToken=c5687fc88969c44d' в System.Reflection.RuntimeAssembly._nLoad(имя_файла имя_файла, расположение кодовой базы String, место выполнения RunAs, сборка времени выполнения, сборка Evidence AssemblySecurity) StackCrawlMark& stackMark, IntPtr pPrivHostBinder, булева throwOnFileNotFound, булева forIntrospection, булевы suppressSecurityChecks) при System.Reflection.RuntimeAssembly.nLoad(AssemblyName имя_файле, струнный CodeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, булевой throwOnFileNotFound, Boolean, forIntrospection булева suppressSecurityChecks. d (AssemblyName assemblyRef) в System.Data.Metadata.Edm.MetadataAssemblyHelper.SafeLoadReferencedAssembly (AssemblyName assemblyName) в System.Data.Metadata.Edm.MetadataAssemblyHelper.d__8.MoveNext.) в System.Data.Metadata.Edm.DefaultAssemblyResolver.GetWildcardAssemblies () в 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(Строковый путь, ExtensionCheck extensionCheck, Строка validExtension, ICollection1 uriRegistry, MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths) at System.Data.Common.Utils.Memoizer
2.<> c__DisplayClass4_0.b__0 () в System.Data.Common.Utils.Memoizer2.Result.GetValue() at System.Data.Common.Utils.Memoizer
2. Оцените (аргумент TArg) в System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections) в System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection().) в Panola.Data.Models.PanolaDB..ctor() в Panola.Data.Services.PanolaConfigurator..ctor(имя строки, логическое значение UseDefualtRepositories) в Panola.Data.Services.PanolaConfigurator..ctor(имя строки) в Panola.Tools.Configurator. Forms.ToolStripItem.HandleClick(EventArgs e) в System.Windows.Forms.ToolStripItem.HandleMouseUp (MouseEventArgs e) в System.Windows.Forms.ToolStripItem.FireEventInteractive (EventArgs e, ToolStripItemEventToTetStWindows) для Item.FireEvent (EventArgs e, ToolStripItemEventType встретился) в System.Windows.Forms.ToolStrip.OnMouseUp (MouseEventArgs mea) в System.Windows.Forms.ToolStripDropDown.OnMouseUp (MouseEventArgs mea) в System.Wont.Wm.Wm.Wms.Forms (Message.Mouse.Forms m, кнопка MouseButtons, щелчки Int32) в System.Windows.Forms.Control.WndProc(сообщение & m) в System.Windows.Forms.ScrollableControl.WndProc(сообщение & m) в System.Windows.Forms.ToolStrip.WndProc(сообщение & 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)
1 ответ
Проблема здесь заключается в привязке сборки; он пробует несколько мест, включая локальную папку и 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>