我使用从 .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);
.
...并将解析器本身添加到类中的某个位置:
静态程序集 CurrentDomain_AssemblyResolve(对象发送者,ResolveEventArgs args)
{
String resourceName = new AssemblyName(args.Name).Name + ".dll";
使用 (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
字节[] 组装数据 = 新字节[流.长度];
流.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_ = Split(wscript.ScriptName, ".")(0)
'从 .CS 文件中获取外部 DLL 和图标名称
'################################################ ######
常量 OPEN_FILE_FOR_READING = 1
设置 objInputFile = fso.OpenTextFile(name_ & ".cs", 1)
'将所有内容读入数组
'#############################
inputData = Split(objInputFile.ReadAll, vbNewline)
对于每个 strData 中的 inputData
如果 left(strData,7)="//+ref>" 那么
csc_references = csc_references & " /reference:" & trim(replace(strData,"//+ref>","")) & " "
万一
如果 left(strData,7)="//+res>" 那么
csc_resources = csc_resources & " /resource:" & trim(replace(strData,"//+res>","")) & " "
万一
如果 left(strData,7)="//+ico>" 那么
csc_icon = " /win32icon:" & trim(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" , "", "runas", 2
WScript.Quit(0)