.vbs スクリプトから呼び出される csc.exe コンパイラを使用します。
xyz.cs スクリプトで、ディレクティブの後に次の行を追加します (私の例は Renci SSH 用です)。
using System;
using Renci;//FOR THE SSH
using System.Net;//FOR THE ADDRESS TRANSLATION
using System.Reflection;//FOR THE Assembly
//+ref>"C:\Program Files (x86)\Microsoft\ILMerge\Renci.SshNet.dll"
//+res>"C:\Program Files (x86)\Microsoft\ILMerge\Renci.SshNet.dll"
//+ico>"C:\Program Files (x86)\Microsoft CAPICOM 2.1.0.2 SDK\Samples\c_sharp\xmldsig\resources\Traffic.ico"
ref、res、および ico タグは、以下の .vbs スクリプトによって取得され、csc コマンドを形成します。
次に、Main にアセンブリ リゾルバーの呼び出し元を追加します。
public static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
.
...そしてクラスのどこかにリゾルバー自体を追加します:
static Assembly CurrentDomain_AssemblyResolve(オブジェクト送信者、ResolveEventArgs args)
{
文字列 resourceName = new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
Assembly.Load(assemblyData) を返します。
}
}
.cs ファイル名に一致するように vbs スクリプトに名前を付けます (たとえば、ssh.vbs は ssh.cs を検索します)。これにより、スクリプトを何度も簡単に実行できますが、私のような馬鹿でなければ、一般的なスクリプトでドラッグ アンド ドロップからターゲットの .cs ファイルを取得できます。
Dim name_,oShell,fso
Set oShell = CreateObject("Shell.Application")
fso = CreateObject("Scripting.fileSystemObject") を設定します。
'VBS スクリプト名をターゲット ファイル名として使用
'##################################################
name_ = Split(wscript.ScriptName, ".")(0)
'.CS ファイルから外部 DLL とアイコン名を取得します
'################################################## ######
Const OPEN_FILE_FOR_READING = 1
objInputFile = fso.OpenTextFile(name_ & ".cs", 1) を設定します。
'すべてを配列に読み込む
'################################
inputData = Split(objInputFile.ReadAll, vbNewline)
各 strData In inputData について
if left(strData,7)="//+ref>" なら
csc_references = csc_references & " /reference:" & トリム (replace(strData,"//+ref>","")) & " "
終了する場合
if left(strData,7)="//+res>" なら
csc_resources = csc_resources & " /resource:" & トリム (replace(strData,"//+res>","")) & " "
終了する場合
if left(strData,7)="//+ico>" なら
csc_icon = " /win32icon:" & トリム (replace(strData,"//+ico>","")) & " "
終了する場合
次
objInputFile.Close
'ファイルをコンパイル
'################
oShell.ShellExecute "c:\windows\microsoft.net\framework\v3.5\csc.exe", "/warn:1 /target:exe " & csc_references & csc_resources & csc_icon & " " & name_ & ".cs" 、「」、「ルーナス」、2
WScript.Quit(0)