这两天尝试在Mac/Linux/Windows三大平台上编译.NET跨平台三驾马车(coreclr/corefx/dnx)之一的corefx(.NET Core Framework),结果三个平台的编译都失败了。后来一一都解决了,在这篇博文中分享一下。

(一)

在Mac上编译corefx遇到的错误如下:

/git/dotnet/corefx/dir.props(214,5): warning :
The Roslyn targets do not exist- Roslyn will not be used for this build, but the package should be restored if you build again.
[/git/dotnet/corefx/src/dirs.proj] /git/dotnet/corefx/dir.props(214,5): warning :
The Roslyn targets do not exist- Roslyn will not be used for this build, but the package should be restored if you build again.
[/git/dotnet/corefx/src/Microsoft.CSharp/src/Microsoft.CSharp.csproj] /var/folders/c4/lf8cm6lx5178xsswpzfs2f_c0000gn/T/tmp257bf798c8da46a7baf3954722152b21.exec.cmd:
line 3: /git/dotnet/corefx/packages/dnx-mono.1.0.0-beta5-11760/bin/dnu: Permission denied /git/dotnet/corefx/packages/Microsoft.DotNet.BuildTools.1.0.25-prerelease-00050/lib/packageresolve.targets(31,5): error MSB3073:
The command ""/git/dotnet/corefx/packages/dnx-mono.1.0.0-beta5-11760/bin/dnu" restore --packages "/git/dotnet/corefx/packages" "/git/dotnet/corefx/src/Microsoft.CSharp/src/project.json"" exited with code 126.
[/git/dotnet/corefx/src/Microsoft.CSharp/src/Microsoft.CSharp.csproj] ... 6 Warning(s)
5 Error(s)

删除corefx中packages文件夹重新编译,错误变成了:

System.IO.InvalidDataException: Unable to read package from path 'Microsoft.Net.ToolsetCompilers.1.0.0-rc3-20150510-01.nupkg'.
---> System.IO.FileFormatException: The specified archive is invalid.
at System.IO.Packaging.Package.OpenCore (System.IO.Stream stream, FileMode packageMode,
FileAccess packageAccess, Boolean ownsStream) <0x1055e4fd0 + 0x001df> in <filename unknown>:0

再次编译,又回到了之前的错误。

怀疑问题是Mac电脑与NuGet服务器之间的网络问题引起的,于是从另外一台Linux服务器上将corefx所需的所有packages下载下来之后,编译就取得了成功。

scp -r root@server:/git/corefx/packages/ /git/dotnet/corefx
./build.sh
...
1 Warning(s)
0 Error(s)
Time Elapsed 00:07:33.93
Build Exit Code = 0

(二)

在Linux CentOS上编译corefx遇到的错误如下:

Restoring MSBuild...
WARNING: Error: SendFailure (Error writing headers)
WARNING: Error: SendFailure (Error writing headers)
WARNING: The request timed out
WARNING: Error: SendFailure (Error writing headers)
Unable to find version '14.1.0.0-prerelease' of package 'Microsoft.Build.Mono.Debug'.
Failed to restore MSBuild.

这个问题是由于没有在Linux上安装根证书,无法以https访问nuget服务器,运行下面的命令就可以解决问题:

mozroots --import --sync

(三)

在Windows上编译corefx遇到的错误如下(电脑上安装的是Visual Studio 2015):

corefx\src\Common\src\System\SR.cs(19,67): error CS0117:
'SR' does not contain a definition for 'ResourceType'
[corefx\src\Microsoft.CSharp\src\Microsoft.CSharp.csproj]
...

这个问题比较怪,竟然是前段时间编译corefx时在bin文件夹生成的文件引起的,删除corefx中的bin文件夹,重新编译,问题就消失了。

【相关链接】

Build fails on Mac/Linux/Windows

在Mac/Linux/Windows上编译corefx遇到的问题及解决方法的更多相关文章

  1. Windows 上编译 corefx 源码生成 Linux 上可用的 System.Data.SqlClient.dll

    最近在排查一个奇怪的 EF Core 查询速度慢的问题,需要在 corefx 2.2.3 的 System.Data.SqlClient 源码中打点. github 上签出 corefx 的源代码,运 ...

  2. 在windows上部署使用Redis出现问题的解决方法

    下载Redis 在Redis的官网下载页上有各种各样的版本,我这次是在windows上部署的,要去GitHub上下载.目前的是2.8.12版的,直接解压,在\bin\release 目录下有个压缩包, ...

  3. Windows 上安装 Redis 及可能出现的错误和解决方法!

    前言 Redis(REmote Dictionary Server) 是一种以key-value写得存储系统.他是开源的ANSI语言编写的.遵守BSD协议.被称作“数据结构服务器”,因为它的值(val ...

  4. [ZZ] 在windows上编译Mesa3d opengl32库

    在windows上编译Mesa3d opengl32库 cheungmine http://blog.csdn.net/ubuntu64fan/article/details/8061475 Mesa ...

  5. 使用VS Code配合Remote Development插件连接远程服务器(Mac/Linux+Windows) | Using VS Code with Remote Development Connect to Remote Server (Mac/Linux+Windows)

    最新版VS Code(2019年6月)出了一系列新的插件,包括Remote Development,Remote SSH等,使得用户可以使用VS Code远程连接服务器写代码,方便了协同工作.具体配置 ...

  6. Go交叉编译(Go语言Mac/Linux/Windows下交叉编译)

    Go交叉编译(Go语言Mac/Linux/Windows下交叉编译) 2019/11/21 Chenxin 在很多时候,由于开发的方便,会有这样的场景出现,使用Mac开发或使用Windows开发,需要 ...

  7. 利用openssl管理证书及SSL编程第2部分:在Windows上编译 openssl

    利用openssl管理证书及SSL编程第2部分:在Windows上编译 openssl 首先mingw的环境搭建,务必遵循下文: http://blog.csdn.net/ubuntu64fan/ar ...

  8. 在windows上编译wireshark源代码

    终于在windows上成功编译了wireshark源代码,个中酸辛,都是泪..只能说要多试! windows上编译wireshark共用到三个东西:wireshark源代码.python.cygwin ...

  9. 在windows 上编译部署Rap2

    在windows 上编译部署Rap2 引言 安装需要的环境 安装后端站点 创建数据库 在全局安装pm2 和 typescript 配置mysql,redis 数据库链接配置 初始化 编译 初始化数据库 ...

随机推荐

  1. LR工具使用之结果分析

    LR工具使用之结果分析 1.启动loadrunner第三个控件Analysis分析测试结果.

  2. 通过微信企业号发送zabbix报警

    采用微信报警时,管理员账户中必须要设置"示警媒体"一项,"收件人"一项可随便填写一下.其它成员则可以不用添加设置. ---------------------- ...

  3. mysql——查询练习

    Sutdent表的定义 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 学号 INT(10) 是 否 是 是 是 Name 姓名 VARCHAR(20) 否 否 是 否 否 Sex 性 ...

  4. 关于 NPOI 报 Invalid column index (256). Allowable column range for BIFF8 is (0..255) or ('A'..'IV') 错误的解决办法

    当看到这个错误的时候,网上搜索可以会有些说列数有限制之类的说法,这个说法是相对于 Office 2003 的,在 Office 2007 之前,最多只可以创建  列:在 Office 2007 之后, ...

  5. VC++ AfxBeginThread 与 CreateThread 的区别

    简言之:AfxBeginThread是MFC的全局函数,是对CreateThread的封装.    CreateThread是Win32 API函数,前者最终要调到后者.具体说来,CreateThre ...

  6. 关于ES6的数组字符串方法

    注:ES6的一些新属性会显示语法错误,不过不会影响效果,在Languages里面也可以调: let:用来定义变量 特点:只能在代码块里面使用,let拥有块级作用域;并且let不允许重复声明;比如: v ...

  7. HTTP-崔希凡笔记

    HTTP协议(重点) 协议:协议的甲乙双方,就是客户端(浏览器)和服务器! 理解成双方通信的格式! l  请求协议: l  响应协议: 1 安装HttpWatch HttpWatch是专门为IE浏览器 ...

  8. AngularJS学习--- 事件处理(Event Handlers) ng-click操作 step 10

    本文主要通过介绍ng-click方法来对angularjs中的事件处理方法做个了解. 1.切换目录 git checkout step- npm start 2.效果 点击右边的小图片,那么左边框中将 ...

  9. Oracle rowid

    本文讨论的是关于oracle从8i开始引进object的概念后的rowid,即扩展(extended)的rowid:1.rowid的介绍先对rowid有个感官认识:SQL> select ROW ...

  10. Android(Xamarin)之旅(二)

    新的一年,新的开始,2016,我要做什么,大家要做什么,啦啦啦. OK,上篇已经介绍了几个简单的控件,这次,我们继续说说控件.但是可能有人认为这有什么难的,问题不在这里,而在于,如果你注意了每一个空间 ...