我有一个从我的配置文件中读取设置的方法,如下所示:
var value = ConfigurationManager.AppSettings[key];
Run Code Online (Sandbox Code Playgroud)
只针对.NET Standard 2.0时,它编译得很好.
现在我需要多个目标,所以我用以下内容更新了我的项目文件:
<TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)
但现在,编译失败netcoreapp2.0,出现以下错误消息:
Error CS0103 The name 'ConfigurationManager' does not exist in the current context (netcoreapp2.0)
Run Code Online (Sandbox Code Playgroud)
另外,我创建了一个新的.NET Core 2.0控制台应用程序(这次仅针对.NET Core 2.0),但同样ConfigurationManager在命名空间下似乎没有System.Configuration.
我很困惑,因为它可以在.NET Standard 2.0下使用,所以我希望它可以在.NET Core 2.0中使用,因为.NET Core 2.0符合.NET Standard 2.0.
我错过了什么?
此问题特定于MSBuild 15.1+(Visual Studio 2017)和PackageReference,这Nuget是完全集成在中的新方法MSBuild。
在我的持续集成脚本中,我得到了类似的东西:
MSBuild.exe /t:Restore MySolution.sln /p:RestoreConfigFile=NuGet.config
Run Code Online (Sandbox Code Playgroud)
其中一个csproj文件包含:
<PackageReference Include="MyPackageA">
<Version>1.2.*</Version>
</PackageReference>
Run Code Online (Sandbox Code Playgroud)
MyPackageA 是一个内部软件包,我希望nuget将其引用为最新可用版本,包括预发行版本。
让我们举两个例子:
例子1
可用的软件包有:
我希望nuget解决依赖关系并选择MyPackageA版本1.2.8。
范例#2
可用的软件包有:
我希望nuget解决依赖关系并选择MyPackageA版本1.2.9-dev2。
但是,在两个示例中,它只能解析为1.2.8版(稳定版本)。
有没有办法告诉MSBuild或Nuget包含预发行软件包?