`DataTable table = DbProviderFactories.GetFactoryClasses();`
在以.NET Framework 4.x和.NET Core 2.x为目标的应用程序中工作方式不同。
我读过类似的问题,发现提供者列表存储在
mashine.config
文件(我有控制台应用程序,所以我没有
web.config
app.config
几乎为空的文件)。所以我认为我的问题与
mashine.config
我桌面上的文件。
c:\Windows\Microsoft.NET\Framework\
v2.0.50727
c:\Windows\Microsoft.NET\Framework64\
v2.0.50727
\CONFIG\machine.CONFIG
v4.0.30319
\Config\machine.Config
v4.0.30319
\Config\machine.Config
\amd64_netfx-machine_config_ocm_b03f5f7f11d50a3a_6.1.7601.17514_none_81fa0191bdd08961\machine.config
c:\Windows\
winsxs
\x86_netfx-machine_config_ocm_b03f5f7f11d50a3a_6.1.7601.17514_none_c9a73868d24cb267\machine.config
文件夹中的文件
winsxs
有“完整”部分
<system.data>
<DbProviderFactories>
<add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</DbProviderFactories>
</system.data>
但是来自
v4.0.30319
<system.data>
<DbProviderFactories/>
</system.data>
我可以在两台电脑上看到它,所以我认为我的Windows或NET安装没有损坏。
-
DbProviderFactories
mashine.config
文件位于
v4.0.30319
-
为什么这个列表是空的?我的意思是,什么软件负责它的填充?我是否需要安装/添加/恢复某些内容?
-
手动将提供者列表添加到此文件(仅从“完整列表”文件复制)是否安全?