前两天在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遇到的问题的更多相关文章

  1. Orchard Core Framework:ASP.NET Core 模块化,多租户框架

    Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...

  2. 扩展ADO.net实现对象化CRUD(.net core/framework)

    扩展ADO.net实现对象化CRUD(.net core/framework) 安装nuget包:CRL using CRL; 实现数据操作 获取数据访问连接IDbConnection dbConne ...

  3. Orchard Core Framework Samples

    解决方案包含内容 多租户应用 一个ASP.NET Core MVC应用程序,它引用模块项目,并为两个启用了不同模块的租户提供支持. 此Web应用程序的主页提供了更多信息,并链接到两个租户和模块端点.租 ...

  4. .Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索

    公司项目最近出现获取访问域名.端口.IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数 ...

  5. .NET Core/Framework 创建委托以大幅度提高反射调用的性能

    都知道反射伤性能,但不得不反射的时候又怎么办呢?当真的被问题逼迫的时候还是能找到解决办法的. 为反射得到的方法创建一个委托,此后调用此委托将能够提高近乎直接调用方法本身的性能.(当然 Emit 也能够 ...

  6. Jenkins 流水线远程部署 .NET Core/Framework 到 IIS

    目录 Windows 安装 Git WebDeploy Windows 从节点 .NET Core 处理 IIS 处理项目 Jenkinsfile .NET Framework 安装环境 .NET F ...

  7. .NET Core与.NET Framework、Mono之间的关系

    随着微软的.NET开源的推进,现在在.NET的实现上有了三个.NET Framework,Mono和.NET Core.经常被问起Mono的稳定性怎么样,后续Mono的前景如何,要回答这个问题就需要搞 ...

  8. Entity Framework Core系列之什么是Entity Framework Core

    前言 Entity Framework Core (EF Core)是微软推荐的基于.NET Core framework的应用程序数据访问技术.它是轻量级,可扩展并且支持跨平台开发.EF Core是 ...

  9. ASP.NET Core 基础知识(一) ASP.NET Core是什么?与.NET Framework、Mono之间的关系 ?

    一.概念: ASP.NET Core 是一个开源的.跨平台的 .NET 实现.而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是 .NET Framework ...

随机推荐

  1. Unable to open file 'TYPES.OBJ'

    Unable to open file 'TYPES.OBJ' 有旧的控件HPP文件存在,旧控件的HPP文件里是Types::TPoint: 新的Berlin的是System::Types::TPoi ...

  2. TJI读书笔记09-访问控制权限

    TJI读书笔记09-访问控制权限 包,package和import 权限修饰符 接口和实现 类的访问权限控制 首先问一个问题,为什么要有访问控制权限? 安全,这当然是一个很重要的原因. 让类库的使用者 ...

  3. Jmeter上传文件

    Jmeter上传文件 一.Fiddler抓包获取表单信息 操作被测系统,上传文件,Fiddler抓包获取提交表单信息如下:

  4. 8.12 CSS知识点5

    背景原点 background-origin 设置元素背景图片的原始起始位置,必须保证背景是background-repeat为no-repeat此属性才会生效. 语法: background-ori ...

  5. keyup keydown keypress 区别

    测试的浏览器环境: chrome 版本 43.0.2357.134 mfirefox 版本 24.0IE6(绿色版 IE.exe)IE7IE8IE9 搜狗拼音输入法3.5(3.5.0.1089)网吧专 ...

  6. 四则运算(Android)版

    实验题目: 将小学四则运算整合成网页版或者是Android版.实现有无余数,减法有无负数.... 设计思路: 由于学到的基础知识不足,只能设计简单的加减乘除,界面设计简单,代码量少,只是达到了入门级的 ...

  7. JavaScript密码复杂度

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  8. SQL保留关键字不能用作表名

    com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'User' 附近有语法错误. 一看就是SQL语句错误,发现控制台console上打印出来的S ...

  9. iOS 1 到 iOS 10 ,我都快老了

    iOS 1:iPhone诞生 虽然很难想像,但初代iPhone在问世时在功能方面其实远远落后于那时的竞争对手,比如Windows Mobile.Palm OS.塞班.甚至是黑莓.它不支持3G.多任务. ...

  10. [转]MNIST机器学习入门

    MNIST机器学习入门 转自:http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html?plg_ ...