动态 Link 库,解决方案无法加载程序集
Dynamic Link Library, Solution can't load assembly
最近我开始学习如何使用 C# 在 Visual Studio 中创建动态 Link 库。
我遵循了有关如何创建 DLL 的在线说明:
- https://docs.microsoft.com/en-us/dotnet/core/tutorials/library-with-visual-studio
- http://www.c-sharpcorner.com/UploadFile/1e050f/creating-and-using-dll-class-library-in-C-Sharp/
- https://blogs.msdn.microsoft.com/benjaminperkins/2017/04/13/how-to-make-a-simple-dll-as-an-assembly-reference-just-for-fun/
完成这些步骤后,我尝试将 .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。
最近我开始学习如何使用 C# 在 Visual Studio 中创建动态 Link 库。
我遵循了有关如何创建 DLL 的在线说明:
- https://docs.microsoft.com/en-us/dotnet/core/tutorials/library-with-visual-studio
- http://www.c-sharpcorner.com/UploadFile/1e050f/creating-and-using-dll-class-library-in-C-Sharp/
- https://blogs.msdn.microsoft.com/benjaminperkins/2017/04/13/how-to-make-a-simple-dll-as-an-assembly-reference-just-for-fun/
完成这些步骤后,我尝试将 .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。