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

Dynamic Link Library, Solution can't load assembly

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

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

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

执行时我收到此消息:

System.IO.FileNotFoundException: 'Could not load file or assembly 'MySql.Connect, Version=1.0.0.2, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.'

我在开始项目时选择了.NET Framework 4.6.1。 Application 选项卡下的 Properties 文件中的目标框架选择为 .NET Framework 2.0。

应引用该文件的项目以 .Net Core 2 Framework 为目标。

我已经解决这个问题将近一周了,并在网上搜索了解决方案。 任何帮助将不胜感激。

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

仔细决定您打算在哪个平台上使用您的 DLL 很重要。

I selected.NET Framework 4.6.1 when I started my project.

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

Properties file under the Application tab is selected as .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,较新的机器不太可能安装它。

The project that should reference to the file is targeting the .Net Core 2 Framework.

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

也就是说,.NET Core 对引用 .NET Framework 程序集的支持有限,但它肯定不能与 .NET Framework 2.0 一起使用(同样,多年来一直不受支持)。此外,这个 "compatibility mode" 可能意味着您失去了交叉 OS 支持,这是 .NET Core 的主要优势之一。

选项 1

因此,下意识的答案是让你的 DLL 以 .NET Core 为目标,如果你想将它与 .NET Core 应用程序一起使用。

选项 2

但是,还有一个选项可以制作一个 可移植 DLL,它可以与 .NET Framework 4.5+ and .NET Core - 使您的 DLL 成为目标 .NET Standard.

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