动态链接库,解决方案无法加载程序集

时间:2018-02-14 22:55:12

标签: c# .net dll .net-core filenotfoundexception

最近,我开始学习如何使用C#在Visual Studio中创建动态链接库。

我遵循了有关如何创建DLL的在线说明:

完成这些步骤后,我尝试将.dll文件添加到我的项目中。

执行时,我收到此消息:

  

System.IO.FileNotFoundException:'无法加载文件或程序集   'MySql.Connect,Version = 1.0.0.2,Culture = neutral,PublicKeyToken = null'。该   系统找不到指定的文件。'

我在启动项目时选择了.NET Framework 4.6.1。 “应用程序”选项卡下的“属性”文件中的目标框架被选为.NET Framework 2.0。

应该引用该文件的项目是针对.Net Core 2 Framework。

我已经解决了这个问题近一个星期,并寻找在线解决方案。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您需要将DLL放在运行时可以找到的位置。最简单的方法是将它放在与.exe相同的目录中,但您也有其他选项(参见How the Runtime Locates Assemblies)。

答案 1 :(得分:3)

请务必仔细确定您打算使用DLL的平台。

  

当我开始我的项目时,我选择了.NET Framework 4.6.1。

如果您的意思是在启动DLL项目时,那么您可以将可以使用此DLL的应用程序类型限制为.NET Framework 4.6.1 +。

  

“应用程序”选项卡下的属性文件被选为.Net Framework 2.0。

如果我理解正确,您将DLL目标从.NET Framework 4.6.1更改为.NET Framework 2.0。这扩大了兼容性,因此使用库可以是.NET Framework 2.0+。但是,这是以.NET Framework的所有新功能为代价的。

请注意,.NET Framework 2.0的官方支持(即补丁)已经gone for several years,并且新机器不太可能安装它。

  

应该引用该文件的项目是针对.Net Core 2 Framework。

这是你问题的症结所在。 .NET Core ain .NET Framework。这是一个完全不同的平台。

也就是说,.NET Core对引用.NET Framework程序集的支持有限,但它肯定不适用于.NET Framework 2.0(多年来一直没有得到支持)。此外,这"兼容模式"可能意味着您失去了跨操作系统支持,这是.NET Core的主要优势之一。

选项1

所以,如果你想将它与.NET Core应用程序一起使用,那么膝盖反射的答案就是让你的DLL成为.NET Core。

选项2

但是,还可以选择使用可移植 DLL与.NET Framework 4.5 + .NET Core一起使用 - make你的DLL目标.NET Standard

有关将DLL更改为目标.NET Standard的说明,请参阅How to port from .net framework to .net standard