Microsoft The Shared Source CLIで.NETプログラミング


Last Update: 2005/01/04
5630 th Visitor

Microsoft The Shared Source CLI

Microsoft .NET Frameworkという、Microsoftの提唱するいわゆる.NETインフラがあります。
.NETの実行環境さえあればどのOSでも動作するという、いわゆるMS版Javaのような考え方が基本となっている技術です。
これらはVisualStudio.NETの基盤となる部分で、これを元にVB.NET、C++.NET、C#.NET、最近ではJ#.NETという各言語が存在しています。
が、これらは現時点でWindows専用的な感じになっています。
そこでMS専用規格だと批判を受けているMicrosoftは、UNIX上でも.NETの開発、実行環境を整備しました。

それがMicrosoft The Shared Source CLIと呼ばれるもので、C#がECMAという規格団体に認証されたために、C#(ECMA-334)と共通基盤言語CLI(ECMA-335)向けに作られたもので、事実上Microsoft .NET Frameworkで利用可能な機能のサブセットとなっています。
現在はC#とJScriptのみをサポートしてます。
MicrosoftはこれをWindows XPとFreeBSD向けにリリースしました。
つまりMicrosoft純正のC#コンパイラ等がFreeBSD用で使えるようになった、という事です。

詳しくは、
http://msdn.microsoft.com/net/sscli/
http://www.microsoft.com/japan/msdn/net/sscli/mssharsourcecli.asp
を参照してください。

MSがCLIの実装OSにFreeBSDを選択したのは、FreeBSDのBSDライセンスがMSに合っていると考えたためです。
最近有名なLinuxはGNUのGPLというライセンスに基づいており、GPLのライセンスでは、バイナリをリリースした時にそれにソースコードを付随させるか、実費のみでソースコードを公開しなければならないという形態を取っています。
BSDライセンスは、バイナリにソースコードを付けなくてもいいので、MSがこちらを選んだのも頷ける話だと思います。

ともあれ、MS純正ツールがFreeBSD向けにリリースされた事は嬉しいニュースであります。
というわけでCLIがリリースされてから半年近く経ちますが、FreeBSDにインストールしてみたいと思います。

CLIのインストール

というわけで早速インストールしましょう。
CLIはportsからインストールできます。

> cd /usr/ports/lang/cli
> su
# make install clean

でインストールできれば何の問題もありません。
が、我が家のFreeBSD 4.7-RELEASEの環境では途中でコンパイルが止まってしまいました。
確認のためにWindows上のVMWareに4.7-RELEASEを新規インストールして試してみましたが、やはりエラーが出るようです。
CLI自身は4.5-RELEASEでMSが動作確認しているので、4.5から4.7の間の変更で出来なくなった可能性が高いです。
一番可能性の高いのは、4.7からgccのバージョンが上がっているのでその関係なのかもしれません。
私の場合は4.5-RELEASEからCLIのportsのMakefileを書き換えてmake packageし、それを4.7-RELEASEに持っていってpkg_addしてインストールしました(w

ちなみにソースから自力でコンパイルする方法は、
http://msdn.microsoft.com/net/sscli/
からソースをダウンロードしてインストールします。

# fetch http://download.microsoft.com/download/.netframeSDK/CLI/Beta2/WXP/EN-US/sscli_20020619.tgz
# tar xvpfz sscli_20020619.tgz
# cd sscli
# source env.csh
# ./configure "/usr/local/cli-20020619"
# ./buildall

でコンパイル&インストールできます。
この時、./configureにオプションを付けているのはportsのディレクトリと名前を一致させるためですので/usr/local/cliとしても良いと思います。
またsourceコマンドでenv.cshを読み込んでいますが、sh系のshellの場合はenv.shを読み込ませてください。

CLIでC#してみる

CLIがインストール出来たら、早速実行してみましょう。
が、その前にCLIが実行できるように環境を整えてやる必要があります。
CLIのライブラリは/usr/local/libなどのパスが通ったディレクトリにインストールされないので、CLIのディレクトリを追加してやる必要があります。

> setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/cli-20021619

とするか.cshrcに同様の事を書いてやりましょう。

> vi ~/.cshrc

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/cli-20021619

> source ~/.cshrc

これが出来たら、

> /usr/local/cli-20020619/csc

としてみてください。
すると、

Microsoft (R) Visual C# Shared Source CLI Compiler version 1.0.0002
for Microsoft (R) Shared Source CLI version 1.0.0
Copyright (C) Microsoft Corporation 2002. All rights reserved.

fatal error CS2008: No inputs specified

のように出れば成功です。
Microsoftの名前がFreeBSDに見えるのはとても違和感がありますね(^^
ちなみにcscはC#のコンパイラコマンドで、一番下のエラーは入力ファイルが無い、つまりコンパイルするファイルが指定されてないよというエラーの事です。
というわけで実際にVisual C#.NETのソースを書いてコンパイル&実行してみましょう。
最初のプログラムはやはりHello Worldです(笑

> vi hello.cs

class HelloClass {
    public static void Main() {
        System.Console.WriteLine("Hello C# World");
    }
}

と書いて保存します。
そしてコンパイルします。

> /usr/local/cli-20020619/csc hello.cs

これで何もエラーが出なければコンパイル成功です。
hello.csと同じディレクトリにhello.exeが出来ているはずです。

そう、このcscコマンドはFreeBSDではなく、Windowsの.NET Frameworkバイナリを作ってくれるのです。
試しに

> file hello.exe

としてみてください。

hello.exe: MS Windows PE 32-bit Intel 80386 console executable

と出ますよね。
紛れもないWindowsバイナリだということがわかります。
これを.NET Frameworkのランタイムが入っているWindows上で実行してやればそのまま実行できるんですが、やはりFreeBSDでも動作確認したいですよね。
そんな時はclixというコマンドを使います。
clixは、簡単に言うと.NET FrameworkなWinバイナリをFreeBSDで実行してくれる素敵ツールです。

> /usr/local/cli-20020619/clix hello.exe
Hello C# World!

と出たら成功です。

CLIでJScriptしてみる

CLIはC#の他にJScriptというMS版JavaScriptも実装しています。
JScriptのコンパイラはjsc.exeというexe形式で提供されていますのでclix経由で動かす必要があります。
試しに実行してみましょう。

> vi hello.js

import System;
Console.WriteLine("Hello JScript World!");

と記述してコンパイル&実行してみます。

> /usr/local/cli-20020619/clix /usr/local/cli-20020619/jsc.exe hello.js
> /usr/local/cli-20020619/clix hello.js
Hello JScript World!

のように出れば成功です。

CLI色々

csc、clix、jsc.exeを今まで使って来ましたが、他にもCLIには様々なツールが付属しています。
doc/tools/tools_index.htmlにある主要ツールの一覧を以下に示します。

cscC# Compiler
jsc.exeJScript Compiler
alAssembly Linker
gacutilGlobal Assembly Cache Tool
cordbgRuntime Debugger
caspol.exeCode Access Security policy Tool
storeadm.exeIsolated Storage Tool
peverifyPEVerify Tool
snStrong Name Tool
clixApplication Launcher for SSCLI
metainfoStrong Name Tool
ilasmStrong Name Tool
ildasmMSIL Disassembler
resgen.exeResource File Generator

基本的に.exe形式はclix経由で実行する必要があります。
またこれらのツールは/usr/local/binにリンクを貼っておくと良いでしょう。

> ln -s /usr/local/cli-20020619/csc /usr/local/bin/csc

またclix経由のアプリケーションはaliasしておくと良いと思います。

> vi ~/.cshrc

alias jsc.exe /usr/local/cli-20020619/csc /usr/local/cli-20020619/jsc.exe


言語環境


もどるにゅ

トップにもどるにゅ