无法在 .NET Core 中编译 Environment.Exit
Can't compile Environment.Exit 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
暴露了,所以我不知道我还缺少什么。
有什么想法吗?
首先我想确认问题存在于当前稳定版本的DNX:1.0.0-rc1-update1
与Visual Studio 2015 Update 1一起安装。问题是已经已在当前不稳定版本 1.0.0-rc2-16343
中修复。
下面我尽量详细的描述一下大家是如何一步步重现问题的。在下一步中,我将展示如何安装最新的 unstable 版本的 DNX(今天是 1.0.0-rc2-16343
)并成功编译演示.最后我展示了如何卸载 DNX 的 unstable build 回到 1.0.0-rc1-update1
.
首先,重要的是要了解可以安装 多个 版本的 DNX。另一方面,在项目上下文菜单中使用 "Restore Packages" 或使用 "dnu restore" 命令解析的所有包都将保存(缓存)在 公共文件夹 %USERPROFILE%\.dnx\packages
。将从 NuGet 解析依赖项。确切地说,文件 %APPDAT%\NuGet\NuGet.Config
包含 NuGet 的配置,其中 URLs 用于解析依赖项。因此,在 "playing" 之后,使用不同的 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 中检查上述来源:"Tools" / "NuGet Package Manager" / "Package Manager Settings" 并选择 "Package Sources"终于。
1) 我删除了 %USERPROFILE%\.dnx\packages
下的所有文件
2) 使用 "dnvm list" 验证我只有 1.0.0-rc1-final
和 1.0.0-rc1-update1
版本的 DNX。我使用 "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);
}
}
}
和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 中将 global.json
的 sdk.verison
从 "1.0.0-rc1-update1"
修改为 "1.0.0-rc2-16343"
:
并保存更改。之后我做了 "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
完成所有步骤后,"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。
相关:
我正在尝试编译一个在 .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
暴露了,所以我不知道我还缺少什么。
有什么想法吗?
首先我想确认问题存在于当前稳定版本的DNX:1.0.0-rc1-update1
与Visual Studio 2015 Update 1一起安装。问题是已经已在当前不稳定版本 1.0.0-rc2-16343
中修复。
下面我尽量详细的描述一下大家是如何一步步重现问题的。在下一步中,我将展示如何安装最新的 unstable 版本的 DNX(今天是 1.0.0-rc2-16343
)并成功编译演示.最后我展示了如何卸载 DNX 的 unstable build 回到 1.0.0-rc1-update1
.
首先,重要的是要了解可以安装 多个 版本的 DNX。另一方面,在项目上下文菜单中使用 "Restore Packages" 或使用 "dnu restore" 命令解析的所有包都将保存(缓存)在 公共文件夹 %USERPROFILE%\.dnx\packages
。将从 NuGet 解析依赖项。确切地说,文件 %APPDAT%\NuGet\NuGet.Config
包含 NuGet 的配置,其中 URLs 用于解析依赖项。因此,在 "playing" 之后,使用不同的 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 中检查上述来源:"Tools" / "NuGet Package Manager" / "Package Manager Settings" 并选择 "Package Sources"终于。
1) 我删除了 %USERPROFILE%\.dnx\packages
下的所有文件
2) 使用 "dnvm list" 验证我只有 1.0.0-rc1-final
和 1.0.0-rc1-update1
版本的 DNX。我使用 "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);
}
}
}
和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-*"
}
}
}
}
我解决了以下依赖关系
和错误信息
现在我使用
安装了最新的不稳定 DNXdnvm 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 中将 global.json
的 sdk.verison
从 "1.0.0-rc1-update1"
修改为 "1.0.0-rc2-16343"
:
并保存更改。之后我做了 "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
非常重要。我建议您使用
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" 中的状态应该与最初相同。可以验证 %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。