Я використовую компілятор csc.exe, викликаний із сценарію .vbs.
У свій сценарій xyz.cs додайте наступні рядки після директив (мій приклад - для SSH Renci):
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)
{
String resourceName = нове AssemblyName (args.Name) .Name + ".dll";
використовуючи (var stream = Assembly.GetExecutingAssembly (). GetManifestResourceStream (resourceName))
{
Байт [] AssemblyData = новий байт [stream.Length];
stream.Read (AssemblyData, 0, AssemblyData.Length);
повернення Assembly.Load (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
якщо зліва (strData, 7) = "// + ref>", то
csc_references = csc_references & "/ reference:" & обрізати (замінити (strData, "// + ref>", "")) & ""
закінчується, якщо
якщо ліворуч (strData, 7) = "// + res>", то
csc_resources = csc_resources & "/ resource:" & trim (замінити (strData, "// + res>", "")) & ""
закінчується, якщо
якщо ліворуч (strData, 7) = "// + ico>", то
csc_icon = "/ win32icon:" & обрізати (замінити (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)