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は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がインストール出来たら、早速実行してみましょう。
が、その前に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は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!
のように出れば成功です。
csc、clix、jsc.exeを今まで使って来ましたが、他にもCLIには様々なツールが付属しています。
doc/tools/tools_index.htmlにある主要ツールの一覧を以下に示します。
| csc | C# Compiler |
| jsc.exe | JScript Compiler |
| al | Assembly Linker |
| gacutil | Global Assembly Cache Tool |
| cordbg | Runtime Debugger |
| caspol.exe | Code Access Security policy Tool |
| storeadm.exe | Isolated Storage Tool |
| peverify | PEVerify Tool |
| sn | Strong Name Tool |
| clix | Application Launcher for SSCLI |
| metainfo | Strong Name Tool |
| ilasm | Strong Name Tool |
| ildasm | MSIL Disassembler |
| resgen.exe | Resource 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