`
RednaxelaFX
  • 浏览: 3053164 次
  • 性别: 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:深入理解Microsoft的SharedSource CLI #### 一、概述 **sscli 2.0**,即SharedSource CLI 2.0,是Microsoft为开源社区贡献的一项重要成果,旨在提供一个简化版的.NET Framework 2.0实现。它不仅...

    微软.NET Framework开源代码SSCLI

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

    sscli20_20060311

    【sscli20_20060311】是一个与.NET框架相关的开源项目,其全称为"Shared Source ...通过研究SSCLI2.0,开发者可以提升自己的编程技巧,更好地利用.NET Framework的各种特性,从而构建出更高性能和更可靠的应用程序。

    ShareSourceCLI2.0

    在SSCLI2.0中,你可能会学习到以下关键知识点: 1. **C# 编程语言**:作为项目的主编程语言,C#是一种面向对象、类型安全的语言,具有现代编程语言的特性,如垃圾回收、泛型、LINQ等。熟悉C#语法和面向对象编程原则...

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

    1. ** RyuJIT 编译器**:在SSCLI 2.0中,可能包含了RyuJIT,这是.NET Framework 4.5之后引入的下一代JIT编译器,提高了性能。 2. **垃圾收集(GC)**:SSCLI展示了.NET的垃圾回收机制,包括对象分配、存活对象检测...

    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 ...

    SSCLI2.pdf

    `async`方法可以返回一个`Task`,允许调用者在不阻塞当前线程的情况下等待异步操作完成。`await`关键字用于挂起异步方法的执行,并在等待的操作完成后恢复。这种模型使得代码更加清晰,易于理解和维护。 总的来说,...

    sscli20.zip

    Microsoft .NET Framework 2.0是.NET框架的重要版本,它为开发者提供了丰富的类库和运行时环境,用于构建高效、可靠的Windows应用程序。本文将深入探讨.NET Framework 2.0中的核心组件——FCL(Framework Class ...

    Shared Source CLI 2.0 Internals DRAFT

    第一版《SSCLI Essentials v1》的问世标志着一项突破性努力,不仅为作者打开了通往公司内部会议的大门,也增强了其在业界的认可度。对于Microsoft而言,这一举措体现了公司对开源和教育的承诺,通过Rotor项目,微软...

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

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

    log4net

    - **nant.build文件**:每个示例项目下的nant.build文件用于自动化构建过程,它们利用NAnt工具编译和部署项目,展示了log4net如何在持续集成环境中工作。 4. **多平台支持** - **Mono支持**:在`examples\mono\...

    .NET开源代码下载地址

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

    基于.NET平台常用的框架整理

    4. **SSCLI**:这是微软在.NET Framework 2.0时代发布的开源代码,对于理解.NET内部工作原理具有重要的参考价值。 5. **DasBlog**、**BlogEngine.NET**、**Dotnetnuke.NET**、**Discuz.NET**、**nopCommerce** 和 *...

    NET核心源代码

    .NET Core是微软开发的一个开源、跨平台的框架,用于构建现代云应用。它不仅支持Windows,还支持Linux、macOS等操作系统,具有高性能、模块化和可移植性等特点。源代码开放使得开发者能够深入理解其内部工作原理,有...

    log4net的C/S和B/S詳細配置資料

    在C/S架构中,log4net的DLL文件通常位于sscli目录下,而在B/S架构中,log4net的DLL文件通常位于NET目录下。 log4net的优点 log4net具有许多优点,如灵活的配置、多种日志输出方式、便捷的日志管理等。这些优点使得...

    调试:windbg资料

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

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

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

Global site tag (gtag.js) - Google Analytics