0

我试图了解如何使用项目的 Target 框架以及它如何影响加载程序集。这是问题所在。

在 Visual Studio 2015 社区中,我的默认目标框架是 .NET 4.6.1。当保留此设置时,我使用 NuGet 将 Npgsql 3.0.7 作为驱动程序安装到本地后端 PostgreSQL 数据库。使用时

DbProviderFactories.GetFactory(ProviderName)

VS 报告找不到 Provider。(在 machine.config 和 GAC 中安装 Npgsql 3.0.7 之后。)

在研究这个(DbProviderFactories Demystified)时,声明是

DbProviderFactories 只需调用 Type.GetType 来加载 Assembly 并创建 Type 的实例。

这使我对 Npgsql 3.0.7 进行了更多研究。当 NuGet 安装程序集时,它将它放置在

C:...\packages\Npgsql.3.0.7\lib\net45\Npgsql.dll

以“net45”为.NET 4.5,我将项目的目标框架更改为.NET 4.5.2。重建后,一切运行良好,没有警告或错误。

那么“目标框架”如何影响 machine.config 和 GAC 的使用方式呢?

感谢您的任何解释(或参考)。

注意:解决方案资源管理器中从未有任何警告表明 Npgsql 程序集与 .NET 4.6.1 不兼容

4

1 回答 1

1

编译与运行时执行是分开的。选择目标框架时,Visual Studio/MSBuild 会检查目标配置文件中的引用程序集以编译项目。

在运行时,首先 Windows 将决定应使用安装的 .NET Framework。然后将由该版本的 .NET Framework 决定如何使用其 GAC 和 machine.config(以及其他位)运行该程序。

NuGet 版本 net45 表示 .NET Framework 4.5 及更高版本。

于 2016-07-29T02:04:32.080 回答