编译生成.NET Core Framework遇到的问题
前两天在Windows Server 2012上编译生成.NET Core Framework的代码库corefx,遭遇了几个问题,在这篇博文中记录一下。
编译生成操作方法是在命令行(Developer Command Prompt for VS2014)中运行corefx中的build.cmd命令。
(一)
遇到的第1个问题[#560]是:"Err445! Got unexpected exception: System.IO.IOException: There is not enough space on the disk."
问题发生在 System.IO.MemoryMappedFiles\tests\MemoryMappedFile\CreateViewAccessor.cs 的第378行:
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(
s_fileNameForLargeCapacity,
FileMode.Open,
"CVA_RunTestLargeCapacity",
capacity))
问题引发点:
// 2^31-1, 2^31, 2^31+1, 2^32-1, 2^32, 2^32+1
Int64[] capacities = { , , , , , }; foreach (Int64 capacity in capacities)
{
RunTestLargeCapacity(capacity);
}
出问题时,capacity的值是4294967296(4G)。
当时corefx代码库所在的硬盘分区剩余空间只有4.81G,后来将剩余空间增加至9.21G,问题消失。
(二)
遇到的第2个问题[#564]是:有时运行build.cmd之后,硬盘分区的卷标被修改为BCLTest。

经过分析源代码,发现问题的引发点在 System.IO.FileSystem.DriveInfo\tests\GetVolumeLabelTests.cs 的97行:
for (int i = ; i < drives.Length; i++)
{
if (originalVolumeInfo.ContainsKey(drives[i].Name))
{
try
{
drives[i].VolumeLabel = (String)originalVolumeInfo[drives[i].Name];
}
catch (UnauthorizedAccessException) { }
}
//...
}
GetVolumeLabelTests在测试过程中会修改硬盘分区的卷标,修改之后会恢复原来的卷标。但如果在恢复过程中出现UnauthorizeAccessException异常(比如当前硬盘分区正在某些文件操作不允许修改卷标),硬盘分区卷标就会变成BCLTest而回不去了。
该问题可以通过下面的代码进行重现:
//Scenario 3: We will revert to the original volume value and check
for (int i = ; i < drives.Length; i++)
{
if (originalVolumeInfo.ContainsKey(drives[i].Name))
{
try
{
drives[i].VolumeLabel = (String)originalVolumeInfo[drives[i].Name];
throw new UnauthorizedAccessException();
}
catch (UnauthorizedAccessException) { }
}
//...
}
(三)
遇到的第3个问题[#566]是运行Microsoft.Win32.Registry.Tests单元测试时出现“Error Key value is incorrect...”异常。
问题的引发点在 Microsoft.Win32.Registry\tests\RegistryKey\RegistryKey_GetValue_str_obj_regvalopt.cs:line 43:
try
{
Object obj = _rk1.GetValue(null, null, RegistryValueOptions.DoNotExpandEnvironmentNames);
if (obj != null)
{
Assert.False(true, "Error Key value is incorrect...");
}
}
当时obj的值是0。
在gitbuh上提交issue之后,根据 @stephentoub 的回复,找到了问题的原因,原来是注册表HKEY_CURRENT_USER中"(Default)"的值为0引起的。

删除该注册表项之后,Windows会自动创建空的"(Default)"。

之后,问题解决。
但是,后来过一段时间再看,HKEY_CURRENT_USER中"(Default)"的值又变为0,问题没有根本解决。
编译生成.NET Core Framework遇到的问题的更多相关文章
- Orchard Core Framework:ASP.NET Core 模块化,多租户框架
Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...
- 扩展ADO.net实现对象化CRUD(.net core/framework)
扩展ADO.net实现对象化CRUD(.net core/framework) 安装nuget包:CRL using CRL; 实现数据操作 获取数据访问连接IDbConnection dbConne ...
- Orchard Core Framework Samples
解决方案包含内容 多租户应用 一个ASP.NET Core MVC应用程序,它引用模块项目,并为两个启用了不同模块的租户提供支持. 此Web应用程序的主页提供了更多信息,并链接到两个租户和模块端点.租 ...
- .Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索
公司项目最近出现获取访问域名.端口.IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数 ...
- .NET Core/Framework 创建委托以大幅度提高反射调用的性能
都知道反射伤性能,但不得不反射的时候又怎么办呢?当真的被问题逼迫的时候还是能找到解决办法的. 为反射得到的方法创建一个委托,此后调用此委托将能够提高近乎直接调用方法本身的性能.(当然 Emit 也能够 ...
- Jenkins 流水线远程部署 .NET Core/Framework 到 IIS
目录 Windows 安装 Git WebDeploy Windows 从节点 .NET Core 处理 IIS 处理项目 Jenkinsfile .NET Framework 安装环境 .NET F ...
- .NET Core与.NET Framework、Mono之间的关系
随着微软的.NET开源的推进,现在在.NET的实现上有了三个.NET Framework,Mono和.NET Core.经常被问起Mono的稳定性怎么样,后续Mono的前景如何,要回答这个问题就需要搞 ...
- Entity Framework Core系列之什么是Entity Framework Core
前言 Entity Framework Core (EF Core)是微软推荐的基于.NET Core framework的应用程序数据访问技术.它是轻量级,可扩展并且支持跨平台开发.EF Core是 ...
- ASP.NET Core 基础知识(一) ASP.NET Core是什么?与.NET Framework、Mono之间的关系 ?
一.概念: ASP.NET Core 是一个开源的.跨平台的 .NET 实现.而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是 .NET Framework ...
随机推荐
- 数据库dump导入
数据库dump导入 一.导入命令介绍: Oracle dump数据导入导出有两种方式:imp/exp.impdp/expdp.两者区别: 1.exp/imp客户端程序,受网络,磁盘的影响:impdp/ ...
- 2016.02.17 JS DOM编程艺术 第四五六章
看完这三章内容,集中精力,加快速度.
- 三星framebuffer驱动代码分析
一.驱动总体概述 本次的驱动代码是Samsung公司为s5pv210这款SoC编写的framebuffer驱动,对应于s5pv210中的内部外设Display Controller (FIMD)模块. ...
- JSF 抽象和实现例子 (函数和属性)
ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/ ...
- 【BZOJ2756】奇怪的游戏(二分,最小割)
题意: Blinker最近喜欢上一个奇怪的游戏.这个游戏在一个 N*M 的棋盘上玩,每个格子有一个数.每次 Blinker 会选择两个相邻的格子,并使这两个数都加上 1.现在 Blinker 想知道最 ...
- 一款好用的杀毒软件-pchunter64
360真是猛,用system权限运行了一坨后台进程.今天清理系统盘想删掉360发现根本没权限.进程又杀不掉. 最后使用 pchuter64 强行干掉了360 避免了 重装系统的尴尬.360作为世界第一 ...
- 普林斯顿结构 VS 哈佛结构
1. 冯·诺依曼结构 冯·诺依曼结构,又称为普林斯顿体系结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.取指令和取操作数都在同一总线上,通过分时复用的方式进行:缺点是在高速运行时,不能 ...
- html-5 --html5教程article、footer、header、nav、section使用
header header元素是一种具有引导和导航作用的辅助元素.通常,header元素可以包含一个区块的标题(如h1至h6,或者hgroup元素标签),但也可以包含其他内容,例如数据表格.搜索表单或 ...
- jQuery 3.1.1 官方下载地址
https://code.jquery.com/jquery-3.1.1.jshttps://code.jquery.com/jquery-3.1.1.min.js 打包下载: http:// ...
- SQL中的循环、for循环、游标
我们使用SQL语句处理数据时,可能会碰到一些需要循环遍历某个表并对其进行相应的操作(添加.修改.删除),这时我们就需要用到咱们在编程中常常用的for或foreach,但是在SQL中写循环往往显得那么吃 ...