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

时间:2015-12-22 10:20:02

标签: c# dnx .net-core

相关:System.Environment in .NET Core

我正在尝试编译在.NET Core中使用Environment.Exit的程序。我使用yo aspnet创建了默认控制台应用程序,安装了System.Runtime.Extensions,然后添加了对Environment.Exit(1)的调用(完整示例on 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'

据我所知,this corefx pull request应该表示Environment.Exit已曝光,所以我无法弄清楚我还缺少什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:14)

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

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

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

无论如何,我严格建议您从%APPDAT%\NuGet\NuGet.Config 删除所有文件以获得确定性结果。此外,应该验证NuGet配置仅从标准NuGet源%USERPROFILE%\.dnx\packages(或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的文件}),它可以包含其他ASP.NET稳定包。可以手动编辑文件https://www.myget.org/F/aspnetmaster/api/v2,也可以在菜单中检查Visual Studio中的上述源:“工具”/“NuGet包管理器”/“包管理器设置”,最后选择“包源”。

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

enter image description here

3)在我的初始配置中仅设置1.0.0-rc1-update1

enter image description here

使用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

我得到以下依赖项已解决

enter image description here

和错误消息

enter image description here

现在我使用

安装了最新的 unstable DNX
{
  "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-*"
      }
    }
  }
}

显示命令“dnvm list”

enter image description here

之后我将NuGet配置修改为另外使用dnvm upgrade -u -r coreclr -arch x64 dnvm upgrade -u -r clr -arch x64 dnvm upgrade -u -r coreclr dnvm upgrade -u -r clr

enter image description here

然后我在Visual Studio的GUI中将https://www.myget.org/F/aspnetvnext/api/v3/index.json的{​​{1}}从sdk.verison修改为global.json

enter image description here

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

enter image description here

并且程序可以执行,没有任何错误

值得一提的是,即使我们将"1.0.0-rc1-update1"更改回"1.0.0-rc2-16343",我们仍然会从sdk.verison获得相同的依赖关系,因为它将用于兑现的套餐在"1.0.0-rc1-update1"。将NuGet配置更改为原始状态(取消选中URL rc2-16343)并删除所有%USERPROFILE%\.dnx\packages非常重要。我建议您使用

卸载DNX的不需要的夜间版本
https://www.myget.org/F/aspnetvnext/api/v3/index.json

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