相关: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
已曝光,所以我无法弄清楚我还缺少什么。
有什么想法吗?
答案 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\packages
和1.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”:
3)在我的初始配置中仅设置1.0.0-rc1-update1
:
使用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
我得到以下依赖项已解决
和错误消息
现在我使用
安装了最新的 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”
之后我将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
:
然后我在Visual Studio的GUI中将https://www.myget.org/F/aspnetvnext/api/v3/index.json
的{{1}}从sdk.verison
修改为global.json
:
并保存更改。之后我制作了“Restore Packages”并再次构建项目。我得到以下版本的依赖项:
并且程序可以执行,没有任何错误。
值得一提的是,即使我们将"1.0.0-rc1-update1"
更改回"1.0.0-rc2-16343"
,我们仍然会从sdk.verison
获得相同的依赖关系,因为它将用于兑现的套餐在"1.0.0-rc1-update1"
。将NuGet配置更改为原始状态(取消选中URL rc2-16343
)并删除所有%USERPROFILE%\.dnx\packages
非常重要。我建议您使用
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。