ฉันใช้คอมไพเลอร์ csc.exe ที่เรียกจากสคริปต์. vbs
ในสคริปต์ 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
จากนั้นเพิ่มตัวเรียกเครื่องมือแก้ไขแอสเซมบลีในหน้าหลัก:
public static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
.
... และเพิ่มตัวแก้ไขที่อื่นในคลาส:
แอสเซมบลีปัจจุบัน CurrentDomain_AssemblyResolve (ผู้ส่งวัตถุ, ResolveEventArgs args)
{
สตริง resourceName = ใหม่ AssemblyName (args.Name) .Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly (). GetManifestResourceStream (resourceName))
{
Byte [] assemblyData = new Byte [stream.Length];
กระแสข้อมูลอ่าน (assemblyData, 0, assemblyData.Length);
ผลตอบแทนการชุมนุมโหลด (assemblyData);
}
}
ฉันตั้งชื่อสคริปต์ vbs ให้ตรงกับชื่อไฟล์. cs (เช่น ssh.vbs ค้นหา ssh.cs); สิ่งนี้ทำให้การเรียกใช้สคริปต์ง่ายขึ้นหลายครั้งมาก แต่ถ้าคุณไม่ใช่คนงี่เง่าอย่างฉันสคริปต์ทั่วไปสามารถรับไฟล์. cs เป้าหมายจากการลากแล้วปล่อย:
ติ่มชื่อ _, oShell, fso
ตั้งค่า oShell = CreateObject ("Shell.Application")
ตั้งค่า fso = CreateObject ("Scripting.fileSystemObject")
ใช้ชื่อสคริปต์ VBS เป็นชื่อไฟล์เป้าหมาย
'################################################
name_ = แยก (wscript.ScriptName, ".") (0)
'รับ DLL ภายนอกและชื่อไอคอนจากไฟล์. CS
'################################################# ######
Const OPEN_FILE_FOR_READING = 1
ตั้งค่า objInputFile = fso.OpenTextFile (name_ & ".cs", 1)
อ่านทุกอย่างลงในอาร์เรย์
'#############################
inputData = แยก (objInputFile.ReadAll, vbNewline)
สำหรับแต่ละ strData In inputData
ถ้า left (strData, 7) = "// + ref>" แล้ว
csc_references = csc_references & "/ reference:" & trim (แทนที่ (strData, "// + ref>", "" ")) &" "
จบถ้า
ถ้า left (strData, 7) = "// + res>" แล้ว
csc_resources = csc_resources & "/ resource:" & trim (แทนที่ (strData, "// + res>", "" ")) &" "
จบถ้า
ถ้า left (strData, 7) = "// + ico>" แล้ว
csc_icon = "/ win32icon:" & ตัด (แทนที่ (strData, "// + ico>", "")) & ""
จบถ้า
ต่อไป
objInputFile.Close
'รวบรวมไฟล์
'################
oShell.ShellExecute "c: \ windows \ microsoft.net \ framework \ v3.5 \ csc.exe", "/ เตือน: 1 / เป้าหมาย: exe" & csc_references & csc_resources & csc_icon & "" & name_ & ".cs" , "", "runas", 2
WScript.Quit (0)