src/programFrames/pack.cs
|
// Launcher for the default (compressed) non-const build.
// ps12exe 把真正的托管程序集压缩后作为 "main" 资源塞进这个 launcher, // launcher 启动时在内存里解压、Assembly.Load 后调用负载的入口点,负载不落盘。 // Windows PowerShell(CodeDom)下负载用 gzip;PowerShell Core 下用 Brotli(压缩率更高,但 .NET Framework 不提供 BrotliStream)。 // 版本/标题等资源参数由 ps12exe 替换下面的 $placeholder(见 CodeDomCompiler.ps1 / CoreCompiler.ps1), // 常量 Resources / version / winFormsDPIAware 与 default.cs 保持一致。 #if Resources [assembly: System.Reflection.AssemblyDescription("$description")] [assembly: System.Reflection.AssemblyCompany("$company")] [assembly: System.Reflection.AssemblyTitle("$title")] [assembly: System.Reflection.AssemblyProduct("$product")] [assembly: System.Reflection.AssemblyCopyright("$copyright")] [assembly: System.Reflection.AssemblyTrademark("$trademark")] #endif #if version [assembly: System.Reflection.AssemblyVersion("$version")] [assembly: System.Reflection.AssemblyFileVersion("$version")] #endif #if winFormsDPIAware [assembly: System.Runtime.Versioning.TargetFrameworkAttribute("$TargetFramework,Profile=Client")] #endif internal static class PS12ExeLauncher { [System.STAThread] static int Main(string[] args) { using (System.IO.Stream stream = typeof(PS12ExeLauncher).Assembly.GetManifestResourceStream("main")) #if CoreHost using (System.IO.Stream decompressed = new System.IO.Compression.BrotliStream(stream, System.IO.Compression.CompressionMode.Decompress)) #else using (System.IO.Stream decompressed = new System.IO.Compression.GZipStream(stream, System.IO.Compression.CompressionMode.Decompress)) #endif using (System.IO.MemoryStream buffer = new System.IO.MemoryStream()) { decompressed.CopyTo(buffer); System.Reflection.Assembly payload = System.Reflection.Assembly.Load(buffer.ToArray()); object result = payload.EntryPoint.Invoke(null, new object[] { args }); return result is int ? (int)result : 0; } } } |