Support for different manifest files (#340)

This commit is contained in:
Gregor Biswanger
2019-11-30 23:30:15 +01:00
parent db9d3b1484
commit 30d49ff6e8
7 changed files with 101 additions and 1521 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using ElectronNET.CLI.Commands.Actions;
@@ -40,6 +41,7 @@ namespace ElectronNET.CLI.Commands
private string _paramAbsoluteOutput = "absolute-path";
private string _paramPackageJson = "package-json";
private string _paramForceNodeInstall = "install-modules";
private string _manifest = "manifest";
public Task<bool> ExecuteAsync()
{
@@ -79,7 +81,13 @@ namespace ElectronNET.CLI.Commands
if (Directory.Exists(tempPath) == false)
{
Directory.CreateDirectory(tempPath);
}
else
{
Directory.Delete(tempPath, true);
Directory.CreateDirectory(tempPath);
}
Console.WriteLine("Executing dotnet publish in this directory: " + tempPath);
@@ -157,7 +165,15 @@ namespace ElectronNET.CLI.Commands
// ToDo: Make the same thing easer with native c# - we can save a tmp file in production code :)
Console.WriteLine("Create electron-builder configuration file...");
ProcessHelper.CmdExecute($"node build-helper.js", tempPath);
string manifestFileName = "electron.manifest.json";
if(parser.Arguments.ContainsKey(_manifest))
{
manifestFileName = parser.Arguments[_manifest].First();
}
ProcessHelper.CmdExecute($"node build-helper.js " + manifestFileName, tempPath);
Console.WriteLine($"Package Electron App for Platform {platformInfo.ElectronPackerPlatform}...");
ProcessHelper.CmdExecute($"npx electron-builder . --config=./bin/electron-builder.json --{platformInfo.ElectronPackerPlatform} --{electronArch} -c.electronVersion=7.1.2 {electronParams}", tempPath);

View File

@@ -16,26 +16,30 @@ namespace ElectronNET.CLI.Commands
public const string COMMAND_ARGUMENTS = "<Path> from ASP.NET Core Project.";
public static IList<CommandOption> CommandOptions { get; set; } = new List<CommandOption>();
private const string ConfigName = "electron.manifest.json";
private string[] _args;
private static SimpleCommandLineParser _parser = new SimpleCommandLineParser();
private static string ConfigName = "electron.manifest.json";
private const string DefaultConfigFileName = "electron.manifest.json";
public InitCommand(string[] args)
{
_args = args;
_parser.Parse(args);
}
private static string _aspCoreProjectPath = "project-path";
private static string _manifest = "manifest";
public Task<bool> ExecuteAsync()
{
return Task.Run(() =>
{
string aspCoreProjectPath = "";
if (_args.Length > 0)
if (_parser.Arguments.ContainsKey(_aspCoreProjectPath))
{
if (Directory.Exists(_args[0]))
string projectPath = _parser.Arguments[_aspCoreProjectPath].First();
if (Directory.Exists(projectPath))
{
aspCoreProjectPath = _args[0];
aspCoreProjectPath = projectPath;
}
}
else
@@ -45,7 +49,15 @@ namespace ElectronNET.CLI.Commands
var currentDirectory = aspCoreProjectPath;
Console.WriteLine("Adding our config file to your project...");
if(_parser.Arguments.ContainsKey(_manifest))
{
ConfigName = "electron.manifest." + _parser.Arguments[_manifest].First() + ".json";
Console.WriteLine($"Adding your custom {ConfigName} config file to your project...");
}
else
{
Console.WriteLine("Adding our config file to your project...");
}
var targetFilePath = Path.Combine(currentDirectory, ConfigName);
@@ -56,7 +68,7 @@ namespace ElectronNET.CLI.Commands
}
// Deploy config file
EmbeddedFileHelper.DeployEmbeddedFile(currentDirectory, ConfigName);
EmbeddedFileHelper.DeployEmbeddedFileToTargetFile(currentDirectory, DefaultConfigFileName, ConfigName);
// search .csproj
Console.WriteLine($"Search your .csproj to add the needed {ConfigName}...");
@@ -99,7 +111,32 @@ namespace ElectronNET.CLI.Commands
string launchSettingText = File.ReadAllText(launchSettingFile);
if (launchSettingText.Contains("\"executablePath\": \"electronize\"") == false)
if(_parser.Arguments.ContainsKey(_manifest))
{
string manifestName = _parser.Arguments[_manifest].First();
if(launchSettingText.Contains("start /manifest " + ConfigName) == false)
{
StringBuilder debugProfileBuilder = new StringBuilder();
debugProfileBuilder.AppendLine("profiles\": {");
debugProfileBuilder.AppendLine(" \"Electron.NET App - " + manifestName + "\": {");
debugProfileBuilder.AppendLine(" \"commandName\": \"Executable\",");
debugProfileBuilder.AppendLine(" \"executablePath\": \"electronize\",");
debugProfileBuilder.AppendLine(" \"commandLineArgs\": \"start /manifest " + ConfigName + "\",");
debugProfileBuilder.AppendLine(" \"workingDirectory\": \".\"");
debugProfileBuilder.AppendLine(" },");
launchSettingText = launchSettingText.Replace("profiles\": {", debugProfileBuilder.ToString());
File.WriteAllText(launchSettingFile, launchSettingText);
Console.WriteLine($"Debug profile added!");
}
else
{
Console.WriteLine($"Debug profile already existing");
}
}
else if (launchSettingText.Contains("\"executablePath\": \"electronize\"") == false)
{
StringBuilder debugProfileBuilder = new StringBuilder();
debugProfileBuilder.AppendLine("profiles\": {");

View File

@@ -29,5 +29,19 @@ namespace ElectronNET.CLI
streamFromEmbeddedFile.CopyTo(fileStream);
}
}
public static void DeployEmbeddedFileToTargetFile(string targetPath, string embeddedFile, string targetFile, string namespacePath = "")
{
using (var fileStream = File.Create(Path.Combine(targetPath, targetFile)))
{
var streamFromEmbeddedFile = GetTestResourceFileStream("ElectronHost." + namespacePath + embeddedFile);
if (streamFromEmbeddedFile == null)
{
Console.WriteLine("Error: Couldn't find embedded file: " + embeddedFile);
}
streamFromEmbeddedFile.CopyTo(fileStream);
}
}
}
}

View File

@@ -15,6 +15,18 @@
"--test=true",
"--blub=wuhuu"
]
},
{
"type": "node",
"request": "launch",
"name": "Launch build-helper",
"program": "${workspaceFolder}/build-helper.js",
"skipFiles": [
"<node_internals>/**"
],
"args": [
"electron.manifest.json"
]
}
]
}

View File

@@ -1,5 +1,6 @@
const manifestFileName = process.argv[2];
// @ts-ignore
const manifestFile = require('./bin/electron.manifest');
const manifestFile = require('./bin/' + manifestFileName);
const fs = require('fs');
const builderConfiguration = { ...manifestFile.build };
@@ -33,4 +34,11 @@ fs.writeFile('./bin/electron-builder.json', builderConfigurationString, (error)
if(error) {
console.log(error.message);
}
});
const manifestContent = JSON.stringify(manifestFile);
fs.writeFile('./bin/electron.manifest.json', manifestContent, (error) => {
if(error) {
console.log(error.message);
}
});

File diff suppressed because one or more lines are too long

View File

@@ -1,27 +1 @@
{
"name": "electron.net.host",
"version": "1.0.2",
"description": "Electron-Host for Electron.NET.",
"repository": {
"url": "https://github.com/ElectronNET/Electron.NET"
},
"main": "main.js",
"author": "Gregor Biswanger",
"license": "MIT",
"scripts": {
"start": "tsc -p ."
},
"dependencies": {
"electron-updater": "^4.0.6",
"image-size": "^0.7.4",
"portscanner": "^2.2.0",
"socket.io": "^2.2.0"
},
"devDependencies": {
"@types/node": "^10.14.4",
"@types/socket.io": "^2.1.2",
"electron": "^7.1.2",
"tslint": "^5.20.1",
"typescript": "^3.7.2"
}
}
{"name":"electron.net.host","version":"1.0.0","description":"Electron-Host for Electron.NET.","repository":{"url":"https://github.com/ElectronNET/Electron.NET"},"main":"main.js","author":"Gregor Biswanger","license":"MIT","scripts":{"start":"tsc -p ."},"dependencies":{"electron-updater":"^4.0.6","image-size":"^0.7.4","portscanner":"^2.2.0","socket.io":"^2.2.0"},"devDependencies":{"@types/node":"^10.14.4","@types/socket.io":"^2.1.2","electron":"^7.1.2","tslint":"^5.20.1","typescript":"^3.7.2"}}