【发布时间】:2018-05-15 11:19:09
【问题描述】:
我有一个方法可以从我的配置文件中读取设置,如下所示:
var value = ConfigurationManager.AppSettings[key];
仅针对 .NET Standard 2.0 时编译良好。
现在我需要多个目标,所以我更新了我的项目文件:
<TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks>
但现在,netcoreapp2.0 的编译失败并显示以下错误消息:
错误 CS0103 当前上下文中不存在名称“ConfigurationManager”(netcoreapp2.0)
另外,我创建了一个新的 .NET Core 2.0 控制台应用程序(这次只针对 .NET Core 2.0),但同样在命名空间 System.Configuration 下似乎没有 ConfigurationManager。
我很困惑,因为它在 .NET Standard 2.0 下可用,所以我希望它在 .NET Core 2.0 中可用,因为 .NET Core 2.0 与 .NET Standard 2.0 兼容。
我错过了什么?
【问题讨论】:
-
您可能缺少this。 (请注意,.NET Standard 目标涵盖 .NET 和 .NET Core,因此实际上也没有必要单独构建它们。)
-
感谢@JeroenMostert,添加 NuGet 包 System.Configuration.ConfigurationManager 解决了问题。现在,这可能是一个单独的问题,但是如果需要添加包来填充缺失的位,.NET Core 2.0 如何被视为与 .NET Standard 2.0 兼容?
-
“.NET Standard 2.0 compliant”的意思是“如果你构建它以 .NET Standard 2.0 为目标,它将在 .NET Core 2.0(以及其他平台)上运行”。这并不意味着“如果您将其构建为面向 .NET Core 2.0,则所有 .NET Standard 2.0 API 都将可用而无需进一步操作”。如果你将它构建到 .NET Standard 2.0 并且它不能在 .NET Core 上运行,那么你有理由抱怨,但我认为这会奏效。 (不过,我还没有测试过。)
-
@AlexSanséau NuGet 包不是 poly-fills。在 .NET Core 上开始工作时,Microsoft 决定选择加入 API,这意味着您的应用程序占用空间更小。我建议花一些时间观看 Immo Landwerth 在 .NET Standard (youtube.com/…) 上创建的视频 - 他是 .NET Standard 团队的 PM
-
RE:
It compiles fine when targeting .NET Standard 2.0 only- 这不可能是正确的,因为ConfigurationManager不是 .NET Standard 的一部分(到目前为止,直到 v.2.1 都是如此)。
标签: c# .net-core app-config .net-standard