我正在将一些现有代码从 .NET Framework 转换为 .NET Standard,以便在 .NET Core 应用程序中使用。图书馆项目已经转换完毕并且正在建设中。它包含一些使用 EF Core 的数据库访问代码。由于此代码的使用者的传统性质,我想继续将 App.Config 或 Web.Config 文件与 Configuration Manager 一起使用。为此,我将 System.Configuration.ConfigurationManager NuGet 包添加到库项目中。
该库通过使用 MSTest 的单元测试项目进行验证。该项目的目标是 .NET Framework 4.7.1,它可以使用 .NET Standard 2.0 库包。面向 .NET Framework 时,所有单元测试都通过了。
将单元测试项目更改为面向 .NET Core 2.0 后,数据库代码不再能够找到单元测试项目的 App.Config 文件中存储的连接字符串。当我调试测试并检查 ConfigurationManager.ConnectionStrings 集合时,我只看到一个定义为 SQL Express 连接的可能来自 Machine.Config 文件。
有没有人通过 .NET 标准库和 ConfigurationManager 兼容性库成功地从 .NET Core 应用程序访问 App.Config?
还有一个已知的问题,在Microsoft.Net.Test.Sdk,这是因为当你使用ConfigurationManager中使用的.Net核心的测试应用,ConfigurationManager中寻找testhost.dll.config,而不是你的标准的组件配置文件。
有基于此问题的不愉快的解决办法在github上讨论,你可以复制你的App.Config中的文件与名称到您的输出目录testhost.dll.config通过把这个元素在测试的csproj文件:
<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
<Copy SourceFiles="App.config" DestinationFiles="$(OutDir)\testhost.dll.config" />
</Target>
然后你可以使用ConfigurationManager.OpenMappedExeConfiguration来加载你的配置文件。
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "testhost.dll.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
例如,为了阅读 appsetting,你可以这样做:
var setting = Config.AppSettings.Settings[key];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句