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

nyc*_*tef 7 c# .net-core dnx

相关:.NET Core中的System.Environment

我正在尝试编译一个Environment.Exit在.NET Core 中使用的程序.我已经习惯yo aspnet创建默认的控制台应用程序,System.Runtime.Extensions然后添加一个调用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暴露,所以我无法弄清楚我还缺少什么.

有任何想法吗?

Ole*_*leg 14

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

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

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

在任何方式,我建议严格以删除所有文件%USERPROFILE%\.dnx\packages有确定的结果.此外,应该验证NuGet配置仅从星标NuGet源https://api.nuget.org/v3/index.json(或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名单",我只有验证1.0.0-rc1-final1.0.0-rc1-update1DNX的版本.我使用诸如"dnvm uninstall 1.0.0-rc2-16343 -r coreclr -arch x86"之类的东西卸载了一些不需要的版本,并1.0.0-rc1-update1通过使用"dnvm upgrade" 验证了它是默认的.之后显示"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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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-*"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我解决了以下依赖项

在此输入图像描述

和错误消息

在此输入图像描述


现在我使用安装了最新的不稳定 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
Run Code Online (Sandbox Code Playgroud)

显示命令"dnvm list"

在此输入图像描述

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

在此输入图像描述

然后我修改sdk.verisonglobal.json,从"1.0.0-rc1-update1""1.0.0-rc2-16343"Visual Studio中的GUI:

在此输入图像描述

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

在此输入图像描述

该程序就可以执行没有任何错误.

值得一提的是,即使我们将更改sdk.verison回到"1.0.0-rc1-update1"我们仍将具有相同的依赖性分辨率,rc2-16343因为它将被用于兑现的包%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
Run Code Online (Sandbox Code Playgroud)

在所有步骤之后,在最初的"dnvm list"中应该具有相同的状态.可以验证%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.