【问题标题】:Ignore assembly .dll in same folder as executable忽略与可执行文件位于同一文件夹中的程序集 .dll
【发布时间】:2016-11-24 18:48:47
【问题描述】:

如果我将 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,版本=6.9.5.0,文化=中性, 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 for Introspection, Boolean 抑制安全检查) 在 System.Reflection.RuntimeAssembly.nLoad(AssemblyName 文件名,字符串代码库,证据 assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean 抑制安全检查) 在 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,证据 assemblySecurity,RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean 抑制安全检查) 在 System.Reflection.Assembly.Load(AssemblyName assemblyRef) 在 System.Data.Metadata.Edm.MetadataAssemblyHelper.SafeLoadReferencedAssembly(AssemblyName 组件名称) 在 System.Data.Metadata.Edm.MetadataAssemblyHelper.d__8.MoveNext() 在 System.Data.Metadata.Edm.DefaultAssemblyResolver.GetAllDiscoverableAssemblies() 在 System.Data.Metadata.Edm.DefaultAssemblyResolver.GetWildcardAssemblies() 在 System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(字符串 assemblyName, String resourceName, ICollection1 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, String validExtension, ICollection1 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(布尔 初始化所有集合) 在 System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection() 在 System.Data.Objects.ObjectContext..ctor(EntityConnection 连接,布尔 isConnectionConstructor) 在 Panola.Data.Models.PanolaDB..ctor() 在 Panola.Data.Services.PanolaConfigurator..ctor(字符串名称,布尔值 UseDefualtRepositories) 在 Panola.Data.Services.PanolaConfigurator..ctor(字符串名称) 在 Panola.Tools.Configurator.MainForm.connectToolStripMenuItem_Click(对象 发件人,EventArgs e) 在 System.Windows.Forms.ToolStripItem.RaiseEvent(对象键,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 遇到) 在 System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) 在 System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea) 在 System.Windows.Forms.Control.WmMouseUp(消息和 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(消息和 m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息和 m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

【问题讨论】:

  • 您能分享您的app.configweb.config 文件吗?
  • &lt;?xml version="1.0"?&gt; &lt;configuration&gt; &lt;connectionStrings&gt; &lt;add name="DB" connectionString="*" providerName="System.Data.EntityClient" /&gt; &lt;/connectionStrings&gt; &lt;startup&gt;&lt;supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/&gt;&lt;/startup&gt;&lt;/configuration&gt;

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


【解决方案1】:

这里的问题是程序集绑定;它会尝试多个位置,包括本地文件夹和 GAC。很难抑制这一点。然而,我怀疑这里最好的选择是在配置文件中添加一个程序集绑定重定向,告诉“融合”允许 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>

【讨论】:

  • 这个需要被&lt;runtime&gt;&lt;assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt;&lt;/assemblybinding&gt;&lt;/runtime&gt;包围吗?
  • @YousifTouma 是的,我会很简洁
  • 很遗憾,这不起作用。异常输出中没有任何变化。
  • @YousifTouma 嗯,这很好奇;它应该,假设绑定更改使其进入 exe 配置。不知道那里有什么建议,没有在我面前看到它
  • 当前配置状态:&lt;?xml version="1.0"?&gt; &lt;configuration&gt; &lt;connectionStrings&gt; &lt;add name="DB" connectionString="*" providerName="System.Data.EntityClient" /&gt; &lt;/connectionStrings&gt; &lt;startup&gt;&lt;supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/&gt;&lt;/startup&gt; &lt;runtime&gt;&lt;assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt;&lt;dependentAssembly&gt; &lt;assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" /&gt; &lt;bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" /&gt; &lt;/dependentAssembly&gt; &lt;/assemblybinding&gt;&lt;/runtime&gt;&lt;/configuration&gt;
猜你喜欢
  • 2012-08-24
  • 1970-01-01
  • 2019-02-10
  • 2018-08-31
  • 2016-04-08
  • 1970-01-01
  • 2013-02-04
相关资源
最近更新 更多