.NETのLibrary(Assembly)のファイル名をどっかからひっぱる方法についてメモ

csc.rsp ファイル

MSが提供している.NETのLibrary(Assembly)のファイル名はどっからひっぱってきたらいいのかと疑問に思っていました

それについての自分用メモ

とりあえずcsc.rsp ファイルの内容からひっぱってくればいいかなと思いました
(環境依存すると思うので完全にいいとは言えないですが)

解説
csc.rsp ファイルは、.NET Framework に付属のすべてのアセンブリを参照します。Visual Studio .NET 開発環境に含まれる実際の参照は、プロジェクトの種類に応じて異なります。

引用元: Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center

(参考) ローカルでの場所
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.rsp

csc.rspからLibraryのファイル名をひっぱる

csc.rsp は mscorlib.dll と同じディレクトリにあるとして
(これも環境依存すると思うので完全にいいとは言えないですが)

mscorlib.dll をAssemblyとしてロードする
そのAssemblyのフルパスを取得する
そのフルパスのディレクトリとファイル名"csc.rsp"を連結してテキストファイルとして読み込む
ファイル中の"/r:"で始まる行だけ集める

サンプルソース
            Assembly mscorlib = Assembly.Load("mscorlib.dll");
            string yen = Path.DirectorySeparatorChar.ToString();
            string sysPath = Path.GetDirectoryName(mscorlib.Location) + yen;
            string cscRspPath = sysPath + "csc.rsp";
            if (!File.Exists(cscRspPath)) throw new Exception("No csc.rsp file. Checked path=" + cscRspPath);
            List<string> refList = new List<string>();
            string ln2;
            foreach (string ln in File.ReadAllLines(cscRspPath))
            {
                ln2 = ln.Trim();
                if (string.IsNullOrEmpty(ln2) || ln2.StartsWith("#")) continue;
                if (ln2.StartsWith("/r:")) { refList.Add(ln2.Substring(3)); }
            }