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