Appearance
提示
使用 electron-edge-js 调用 .net standard 或者 .net core 的 dll 中的方法
1. 客户端安装
当前版本 12.4.0
bash
yarn add electron-edge-js2. 新建.net 的 dll
2.1 .netcore 版本
- .net core 的版本可以选择
2.0,2.1,2.2,3.0 - 添加项目引用

- 代码
csharp
using System.Threading.Tasks;
using ExternalLibrary;
using Newtonsoft.Json;
namespace QuickStart.Core
{
class ExternalMethods
{
private readonly Library _library = new Library();
public async Task<object> GetPersonInfo(dynamic input)
{
return await Task.Run(() =>JsonConvert.SerializeObject(_library.GetPerson(), Formatting.Indented));
}
}
}csharp
using System;
using System.Threading.Tasks;
namespace QuickStart.Core
{
public class LocalMethods
{
public async Task<object> GetAppDomainDirectory(dynamic input)
{
return await Task.Run(() => AppDomain.CurrentDomain.BaseDirectory);
}
public async Task<object> GetCurrentTime(dynamic input)
{
return await Task.Run(() => DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
public async Task<object> UseDynamicInput(dynamic input)
{
return await Task.Run(() => $".NET Core welcomes {input}");
}
}
}2.2 net standard
- .net standard 的版本可以选择
2.0 - .net standard 的版本
2.1目前不支持 - 添加项目引用

- 代码
方法必须是异步的 参数是 dynamic 类型 方法返回 Task<object> object 可以为 string 或者 json
csharp
using System.Threading.Tasks;
using ExternlaLibrary.Standard;
using Newtonsoft.Json;
namespace QuickStart.Standard
{
class ExternalMethods
{
private readonly Library _library = new Library();
public async Task<object> GetPersonInfo(dynamic input)
{
return await Task.Run(() =>JsonConvert.SerializeObject(_library.GetPerson(), Formatting.Indented));
}
}
}csharp
using System;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace QuickStart.Standard
{
public class LocalMethods
{
public async Task<object> GetAppDomainDirectory(dynamic input)
{
return await Task.Run(() => AppDomain.CurrentDomain.BaseDirectory);
}
public async Task<object> GetCurrentTime(dynamic input)
{
return await Task.Run(() => DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
public async Task<object> UseDynamicInput(dynamic input)
{
return await Task.Run(() => $".NET Standard welcomes {input}");
}
}
}3. 客户端的调用
3.1 环境变量配置 配置在前端部分 不是配置在 electron 的启动部分
javascript
var oldversion = location.search.split("version=")[1];
var version = "";
var namespace =
"QuickStart." + oldversion.charAt(0).toUpperCase() + oldversion.substr(1);
if (oldversion === "core") {
version = oldversion + "app" + "3.0";
} else {
version = oldversion + "2.1";
}
// dll 所在的目录
const baseNetAppPath = path.join(
__dirname,
"/src/" + namespace + "/bin/Debug/net" + version
);
// .netcore 需要设置 process.env.EDGE_USE_CORECLR = 1
if (oldversion !== "standard") {
process.env.EDGE_USE_CORECLR = 1;
}
// 设置edge 调用 c# 程序的的所在目录
process.env.EDGE_APP_ROOT = baseNetAppPath;3.2 js 对 c# 中方法的调用
javascript
var edge = require("electron-edge-js");
var baseDll = path.join(baseNetAppPath, namespace + ".dll");
var localTypeName = namespace + ".LocalMethods";
var externalTypeName = namespace + ".ExternalMethods";
//对方法的调用相当于自动new了一个类 这个类是无参的类
var getAppDomainDirectory = edge.func({
assemblyFile: baseDll,
typeName: localTypeName,
methodName: "GetAppDomainDirectory"
});
var getCurrentTime = edge.func({
assemblyFile: baseDll,
typeName: localTypeName,
methodName: "GetCurrentTime"
});
var useDynamicInput = edge.func({
assemblyFile: baseDll,
typeName: localTypeName,
methodName: "UseDynamicInput"
});
var getPerson = edge.func({
assemblyFile: baseDll,
typeName: externalTypeName,
methodName: "GetPersonInfo"
});
window.onload = function() {
document.getElementById("baseDll").innerHTML = baseDll;
//第一个参数是传入到c#中的参数
getAppDomainDirectory("", function(error, result) {
if (error) throw error;
document.getElementById("GetAppDomainDirectory").innerHTML = result;
});
getCurrentTime("", function(error, result) {
if (error) throw error;
document.getElementById("GetCurrentTime").innerHTML = result;
});
useDynamicInput("Node.Js", function(error, result) {
if (error) throw error;
document.getElementById("UseDynamicInput").innerHTML = result;
});
getPerson("", function(error, result) {
//if (error) throw JSON.stringify(error);
document.getElementById("GetPersonInfo").innerHTML = result;
});
};