`
RednaxelaFX
  • 浏览: 3016629 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

在简体中文XP下构建SSCLI 2.0的注意点

阅读更多
一个产品给end user的时候需要注重用户体验,一份源代码给程序员的时候也要注重一下用户体验啊 T T
真的能做到out-of-the-box exprience的源代码真是够少的。不过也正是这样才能磨炼出高手?之前要用VS2008编译boost已经快搞死我了。这两天要用一下Rotor也是,心里一直在念叨要是自己机上装的系统是英文版的Windows XP和Visual Studio 2005就好了。
T T

之前Jeremy Kuhne也提到了如何应对Visual Studio 2008来调整SSCLI 2.0的代码,但是要在简体中文Windows XP下光是使用他所做的修改还不足够。

首先,Jeremy似乎漏说了一点:他在\sscli20\win.env.bat里添加的这句:
if "%ROTOR_WINSDKDIR%"=="" set ROTOR_WINSDKDIR=%WindowsSdkDir%

在系统没有设置这个环境变量的时候是起不到作用的。然而VC9里又没有PlatformSDK目录,这个配置就会失败……
于是,在环境变量里设置WindowsSdkDir,值为C:\Program Files\Microsoft SDKs\Windows\v6.0A
(或者机器上Windows SDK的实际安装位置,例如说装了Windows SDK 6.1的话路径会不同)

另外,还是在\sscli20\win.env.bat,我遇到了个奇怪的问题,在这行:
set /A ROTOR_TOOLSET_VERSION=%ROTOR_TOOLSET_VERSION%/10-60

会报错说“找不到操作数”。无法理解嗯。于是干脆把整个toolset detection都REM掉了,直接换上一句:
set ROTOR_TOOLSET_VERSION=90

OTL。

接下来,在\sscli20\env.core.pl里,这行:
if (! ($platform_os_version =~ s/\nMicrosoft.*\[Version +([0-9]+\.[0-9]+)\..*\]/$1/g)) {

糟糕的是,我这简体中文的XP在输入ver命令的时候得到的是这样的结果:
Microsoft Windows XP [版本 5.1.2600]

没有那个"Version",于是这个正则表达式会匹配失败。
解决的办法是把"Version"换成“版本”:
if (! ($platform_os_version =~ s/\nMicrosoft.*\[版本 +([0-9]+\.[0-9]+)\..*\]/$1/g)) {


============================================================================

\sscli20\clr\vm\thread.cpp
这个文件里似乎有好几个超过0x80的字符。太奇怪了吧这个……难道是UTF-8的?但是没有UTF-8的BOM。反正我在error里看到这个了:
引用
vm\threads.cpp : error C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss


同样的问题也发生在了\sscli20\clr\vm\win32threadpool.cpp
引用
vm\win32threadpool.cpp(2582) : error C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss


实在受不了了,写了个简单的C#程序来检测是不是有非ASCII字符在代码中出现:
cp.cs:
using System;
using System.IO;

sealed class CP {
    static void Main( string[ ] args ) {
        int lineno = 1;
        using ( FileStream fs = File.OpenRead( args[0] ) ) {
            while ( fs.CanRead ) {
                int b = fs.ReadByte();
                if ( b < 0 ) break;
                else if ( b == 0x0A ) ++lineno;
                else if ( b > 0x080 ) {
                    Console.WriteLine( "Line {0}: 0x{1:X}", lineno, b );
                }
            }
        }
    }
}

然后写个Perl或者Ruby脚本来看看输出结果就知道有没有文件出问题了……不过看到也就是这两个文件问题严重。改了这两个文件之后总算能build完了,虽然中间还是有些cannot find header file之类的错误。

===========================================================================

正好,拿上面的cp.cs来测试下刚build完的SSCLI 2.0的csc与clix:
引用
H:\sscli20>csc cp.cs
Microsoft (R) Shared Source CLI C# Compiler version 2.0.0001
for Microsoft (R) Shared Source CLI version 2.0.0
Copyright (C) Microsoft Corporation. All rights reserved.


H:\sscli20>clix cp env.core.pl
Line 552: 0xB0
Line 552: 0xE6
Line 552: 0xB1
Line 552: 0xBE
Line 553: 0xB0
Line 553: 0xE6
Line 553: 0xB1
Line 553: 0xBE

env.core.pl这两行就是我把Version改成“版本”并添加注释的地方。Good,暂时看来运行得还算正常。

接下来可以开始hack我要修改的那部分代码了……这逃逸计算的问题我就是想看看在实际的C#编译器里能不能运行起来……

===========================================================================

另外,这边A Night With Rotor and Rotor Resources也有些相关的build问题。不过他遇到的问题我没遇到就是了……留着链接参考用。

更新:
在博客园看到一个链接帖,顺便记下来
Build SSCLI20 under VS2008 full Document (完全手册)
分享到:
评论

相关推荐

    sscli 2.0 简介.docx

    sscli 2.0 简介.docxsscli 2.0 简介.docxsscli 2.0 简介.docxsscli 2.0 简介.docxsscli 2.0 简介.docxsscli 2.0 简介.docxsscli 2.0 简介.docx

    微软.NET Framework开源代码SSCLI

    16、dlls - 包含在构建过程中所需要的本机共享库。 17、xmlparser - 包含 XML 分析器的源代码。 18、fx - 包含主要名字空间中类的实现,包括正则表达式、XML和网络等。 19、jscript - 包含了使用 C# 编写的 JScript ...

    sscli:共享源公共语言基础设施 2.0 版本

    sscli 共享源公共语言基础设施 2.0 版本

    sscli20_20060311:版本-windows source code

    此实现可在Windows XP上构建并运行。 快速细节 版本:2.0发布日期:2006/3/23。 英语语言 原始网址: : : download/en/ 此下载中的文件 文件 姓名 尺寸 sscli20_20060311.tgz 21.6兆字节 概述 通用语言基础结构...

    sscli_Shared Source CLI 2.0 (开发代号Rotor)

    Shared Source CLI 2.0 (开发代号Rotor) 是微软.NET Framework 2.0的Shared Source实现版本。Shared Source是微软推出的源代码共享计划,可以在一定限制的情况下获得/使用源代码,详情可以参考Microsoft Shared ...

    ShareSourceCLI2.0

    SSCLI2.0的源码。原来的代码里没有包含工程文件,这里还包含了一个项目文件,方便代码的阅读与分析。

    SSCLI2.pdf

    技术文档,包括 SSCLI, Concurrent Programming, Threading in C# pdf 格式,分享给大家

    sscli20_20060311

    sscli20_20060311

    sscli20.zip

    Microsoft .NET Framework 2.0 FCL/BCL/RUNTIME,.NET虚拟机实现源代码!

    sscli_20021101:版本1.0发布日期-windows source code

    该实现可在Windows XP,FreeBSD操作系统和Mac OS X 10.2上构建并运行。 快速细节 版本:1.0发布日期:11/5/2002 英语语言 原始网址: : displaylang=en& 此下载中的文件 本节中的链接对应于此下载可用的文件。 ...

    .NET开源代码下载地址

    以.zip文件的形式下载.NET Framework的完整源代码。存档包括可在Visual Studio中打开的解决方案和项目文件。此解决方案不会构建,因为它缺少关键组件,如资源,XAML文件等,但它足以浏览Visual Studio中的源代码。

    调试:windbg资料

    在DotNet方面WinDbg是调试分析SSCLI的最佳工具,同时可以和SOS扩展一起调试分析.net程序。最近一段时间项目需要学习了一下,有感于WinDbg功能的强大。学习的过程并不一帆风顺,WinDbg自带的英文文档大而泛,网上资料...

    static-sitemap-cli:CLI可以从本地文件系统为静态站点生成XML站点地图

    静态sitemap-cli CLI可以从本地文件系统为静态站点生成XML站点地图。 快速简便的CLI可以为... 默认情况下,CLI输出到stdout这样您就可以通过管道将其用于其他出色的工作。 CLI还允许您通过stdin管道输入BASEURL。 选

    .NET程序加解密技术基础

    微软官方给出的定义是:.NET框架是支持生成和运行下一代运行程序内部Windows的组件。同时,.NET还有很多别的平台上的实现,只要符合计算机制造商协会规定的公共语言基础框架CLI的平台,我们都可以实现.NET的平台。...

    windbg资料集合

    在DotNet方面WinDbg是调试分析SSCLI的最佳工具,同时可以和SOS扩展一起调试分析.net程序。最近一段时间项目需要学习了一下,有感于WinDbg功能的强大。学习的过程并不一帆风顺,WinDbg自带的英文文档大而泛,网上资料...

Global site tag (gtag.js) - Google Analytics