无法在.NET Core中编译Environment.Exit

相关: .NET Core中的System.Environment

我正在尝试编译一个在.NET Core中使用Environment.Exit的程序。 我已经使用yo aspnet创建了默认的控制台应用程序,安装了System.Runtime.Extensions ,然后添加了对Environment.Exit(1)的调用Environment.Exit(1) github上的完整示例)。 运行dnu build此错误:

C:\git\environmentexit\ConsoleApplication\Program.cs(13,25): DNXCore,Version=v5.0 error CS0117: 'Environment' does not contain a definition for 'Exit'

据我所知, 这个corefx pull请求应该意味着Environment.Exit暴露,所以我无法弄清楚我还缺少什么。

有任何想法吗?

首先,我想确认当前稳定版本的DNX中存在问题: 1.0.0-rc1-update1与Visual Studio 2015 Update 1一起安装。问题在当前不稳定版本1.0.0-rc2-16343 修复 1.0.0-rc2-16343

我试着在下面详细描述每个人如何逐步重现问题。 在下一步中,我将展示如何安装DNX的最新不稳定版本(今天是1.0.0-rc2-16343 )并成功编译您的演示。 最后,我展示了如何卸载DNX的不稳定版本,回到1.0.0-rc1-update1

首先,了解可以安装多个版本的DNX非常重要。 另一方面,通过项目上下文菜单中的“Restore Packages”使用或通过使用“dnu restore”命令解析的所有包将被保存(缓存)在公共文件夹 %USERPROFILE%\.dnx\packages 。 依赖关系将从NuGet解决。 确切地说,文件%APPDAT%\NuGet\NuGet.Config包含NuGet的配置,其中包含用于解析依赖关系的URL。 因此,在使用不同的NuGet配置和不同版本的DNX“播放”之后,可能会出现错误的结果。 我发现这种行为是今天DNX的大型设计问题。 我希望它很快就能解决。

无论如何,我严格建议删除 %USERPROFILE%\.dnx\packages 所有文件以获得确定性结果。 此外,应该validationNuGet配置仅从星标NuGet源https://api.nuget.org/v3/index.json (或https://www.myget.org/F/aspnetvnext/api/v2/加载文件https://www.myget.org/F/aspnetvnext/api/v2/ )并且可选地来自https://www.myget.org/F/aspnetvnext/api/v3/index.json (或https://www.myget.org/F/aspnetmaster/api/v2 ),其中包含其他ASP.NET稳定包。 可以手动编辑文件%APPDAT%\NuGet\NuGet.Config ,也可以在菜单中检查Visual Studio中的上述源:“工具”/“NuGet包管理器”/“包管理器设置”并选择“包源”最后。

1)我删除了%USERPROFILE%\.dnx\packages下的所有文件.2)使用“dnvm list”validation我只有1.0.0-rc1-final1.0.0-rc1-update1版本的DNX。 我使用诸如“dnvm uninstall 1.0.0-rc2-16343 -r coreclr -arch x86”之类的东西卸载了一些不需要的版本,并通过使用“dnvm upgrade”validation了1.0.0-rc1-update1是默认的。 之后显示“dnvm list”:

在此处输入图像描述

3)在我的初始配置中仅设置https://api.nuget.org/v3/index.json

在此处输入图像描述

Program.cs构建演示之后

 using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Console.WriteLine("Goodbye, cruel world"); Environment.Exit(1); } } } 

project.json

 { "version": "1.0.0-*", "description": "ConsoleApplication Console Application", "authors": [ "" ], "tags": [ "" ], "projectUrl": "", "licenseUrl": "", "tooling": { "defaultNamespace": "ConsoleApplication" }, "commands": { "ConsoleApplication": "ConsoleApplication" }, "dependencies": { }, "frameworks": { "dnx451": { }, "dnxcore50": { "dependencies": { "System.Console": "4.0.0-*", "System.Runtime": "4.0.21-*", "System.Runtime.Extensions": "4.0.11-*" } } } } 

我解决了以下依赖项

在此处输入图像描述

和错误消息

在此处输入图像描述


现在我使用安装了最新的不稳定 DNX

 dnvm upgrade -u -r coreclr -arch x64 dnvm upgrade -u -r clr -arch x64 dnvm upgrade -u -r coreclr dnvm upgrade -u -r clr 

显示命令“dnvm list”

在此处输入图像描述

之后我修改了NuGet配置以使用https://www.myget.org/F/aspnetvnext/api/v3/index.json

在此处输入图像描述

然后我在Visual Studio的GUI sdk.verisonglobal.json"1.0.0-rc1-update1""1.0.0-rc2-16343"

在此处输入图像描述

并保存了更改。 之后我制作了“Restore Packages”并再次构建项目。 我得到以下版本的依赖项:

在此处输入图像描述

并且程序可以在没有任何错误的情况下执行。

值得一提的是,即使我们将sdk.verison更改回"1.0.0-rc1-update1"我们仍然会从rc2-16343获得相同的依赖性分辨率,因为它将用于在%USERPROFILE%\.dnx\packages兑换的包%USERPROFILE%\.dnx\packages 。 将NuGet配置更改为原始状态(取消选中URL https://www.myget.org/F/aspnetvnext/api/v3/index.json )并删除所有%USERPROFILE%\.dnx\packages 。 我建议你通过使用来卸载DNX的不需要的夜间版本

 dnvm upgrade dnvm uninstall 1.0.0-rc2-16343 -r coreclr -arch x64 dnvm uninstall 1.0.0-rc2-16343 -r clr -arch x64 dnvm uninstall 1.0.0-rc2-16343 -r coreclr dnvm uninstall 1.0.0-rc2-16343 -r clr 

在所有步骤之后,在最初的“dnvm list”中应该具有相同的状态。 可以validation%USERPROFILE%\.dnx\runtimes不包含1.0.0-rc2-16343任何目录,文件%USERPROFILE%\.dnx\alias\default.txt包含dnx-clr-win-x86.1.0.0-rc1-update1和PATH仅包含%USERPROFILE%\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin ,而不包含对1.0.0-rc2-16343引用。 换句话说,我们完成了测试并返回到稳定的rc1-update1。