Saya menggunakan kompiler csc.exe yang dipanggil dari skrip .vbs.
Dalam skrip xyz.cs Anda, tambahkan baris berikut setelah arahan (contoh saya adalah untuk 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"
Tag ref, res, dan ico akan diambil oleh skrip .vbs di bawah ini untuk membentuk perintah csc.
Kemudian tambahkan pemanggil resolver perakitan di Main:
public static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
.
... dan tambahkan resolver itu sendiri di suatu tempat di kelas:
static Assembly CurrentDomain_AssemblyResolve (pengirim objek, ResolveEventArgs args)
{
String resourceName = new AssemblyName (args.Name) .Name + ".dll";
menggunakan (var stream = Assembly.GetExecutingAssembly (). GetManifestResourceStream (resourceName))
{
Byte [] assemblyData = Byte baru [stream.Length];
stream.Baca (assemblyData, 0, assemblyData.Length);
mengembalikan Assembly.Load (assemblyData);
}
}
Saya beri nama skrip vbs agar sesuai dengan nama file .cs (mis. Ssh.vbs mencari ssh.cs); ini membuat menjalankan skrip berkali-kali jauh lebih mudah, tetapi jika Anda bukan idiot seperti saya maka skrip generik dapat mengambil file .cs target dari drag-and-drop:
Dim name_, oShell, fso
Setel oShell = CreateObject ("Shell.Application")
Set fso = CreateObject ("Scripting.fileSystemObject")
MENGAMBIL NAMA SCRIPT VBS SEBAGAI NAMA FILE TARGET
'#############################################
name_ = Split (wscript.ScriptName, ".") (0)
'DAPATKAN DLL EKSTERNAL DAN NAMA-NAMA ICON DARI FILE .CS
'############################################## ######
Const OPEN_FILE_FOR_READING = 1
Setel objInputFile = fso.OpenTextFile (name_ & ".cs", 1)
BACA SEGALA SESUATU DALAM ARRAY
'############################
inputData = Berpisah (objInputFile.ReadAll, vbNewline)
Untuk setiap strData Dalam inputData
jika dibiarkan (strData, 7) = "// + ref>" lalu
csc_references = csc_references & "/ reference:" & trim (ganti (strData, "// + ref>", "")) & ""
berakhir jika
jika dibiarkan (strData, 7) = "// + res>" lalu
csc_resources = csc_resources & "/ resource:" & trim (ganti (strData, "// + res>", "")) & ""
berakhir jika
jika dibiarkan (strData, 7) = "// + ico>" lalu
csc_icon = "/ win32icon:" & trim (ganti (strData, "// + ico>", "")) & ""
berakhir jika
Lanjut
objInputFile.Close
'Gabungkan FILE
'#################
oShell.ShellExecute "c: \ windows \ microsoft.net \ framework \ v3.5 \ csc.exe", "/ warnai: 1 / target: exe" & csc_references & csc_resources & csc_icon & "" & name_ & ".cs" , "", "runas", 2
WScript.Quit (0)