Visual Studio 未能加载文件或程序集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual Studio 未能加载文件或程序集相关的知识,希望对你有一定的参考价值。

未能加载文件或程序集“Microsoft.Data.Entity.Design.Extensibility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。

参考技术A 文件安装问题吧 参考技术B 这是一个安装文件丢失的问题,重新下载一个完整版的,安装下就可以解决该问题本回答被提问者采纳

Visual Studio 设计器无法加载文件或程序集

【中文标题】Visual Studio 设计器无法加载文件或程序集【英文标题】:Visual Studio designer cannot load file or assembly 【发布时间】:2015-08-04 12:04:39 【问题描述】:

我使用 Visual C++ 2010 express (win32) 创建了一个 dll。 然后将文件移动到可视 C# 2010 express (X86) 应用程序的 bin 目录(调试或发布)中,因为我想从该程序集中调用一个函数:

public MyForm()

  InitializeComponent();
  functionCall();

[DllImport("extern.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void functionCall();

一切正常。 然后我决定将这个表单的一些功能移动到一个用户控件中,其中包括这个外部函数调用。

public MyControl()

  InitializeComponent();
  functionCall();

[DllImport("extern.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void functionCall();

现在出现了一个问题:Visual Studio 设计器无法显示表单,尽管程序已执行,但它运行正常。 表单设计器上的错误如下:

无法加载文件或程序集 extern.dll 或其依赖项之一。 不支持操作。 (HRESULT 例外……)

如果我从不同的线程调用该函数(出于某种原因我需要它),Visual Studio 会崩溃而没有任何线索。 在网上,我读到了 VS 设计器显示 winform 的问题,但似乎没有人回答我的确切问题,特别是 dll 文件没有被阻止,非托管 .dll 和托管 .exe 似乎都是 32 位的。

更新: 令人难以置信的是,尽管进行了所有搜索,但我错过了唯一对我有帮助的关键字:DesignMode。 我是这样修复的:

public MyControl()

  InitializeComponent();
  if (!isDesignMode())  functionCall();


private bool isDesignMode()
 
  return (System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToLower() == "vcsexpress" ||  
  System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToLower() == "devenv");

【问题讨论】:

在设计时可以找到这个 DLL 的几率非常低,Windows 会在错误的目录中查找。使用 DesignMode 属性防止危险代码在设计时运行。 【参考方案1】:

Visual Studio 设计器不支持很多东西(根据我的经验——继承、泛型和各种数据库的东西)。相反,您可以做的是将不受支持的机制的任何用法包含在对DesignMode 属性的检查中:

if (this.DesignMode)

    //TODO:  some fake UI changes that represent what the external call 
    // does so what you see in the designer is more accurate

else

    //TODO: Use unsupported mechanic, such as using an external dll
    // Note that it's best to put the actual extern method definition elsewhere

问题可能是当设计器对您的类执行静态初始化时,它遇到了外部引用并立即尝试加载引用的 dll(由于某种原因它无法找到)。我发现最好将所有外部定义放在它们自己的包装类中(例如所有 User32.dll 内容的 Win32ToolKit 静态类)。

【讨论】:

以上是关于Visual Studio 未能加载文件或程序集的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2013 asp.net运行时错误,未能加载文件和程序集

Visual Studio2005问题:未能正确加载包“Visual Studio Macros Package”

visual studio 调试时遇到 System.BadImageFormatException

vs2013 未能加载包“visual c++ package”

Visual Studio 设计器无法加载文件或程序集

Visual Studio Tools for Office 解决方案