Uno-Platform:如何在 Uno-Platform 库中嵌入 JavaScript 个库?
Uno-Platform: How to embed JavaScript libraries in Uno-Platform Library?
TL,DR: 如何将 JavaScript 嵌入到 Uno-Platform 跨平台库项目中?
背景
下面是一些关于如何将 JavaScript 库嵌入 Uno 平台的 WASM 平台项目的重要资源 Application(不是 图书馆):
问题
但是,上面没有解决,我也没有找到任何关于如何在 Uno 平台中执行此操作的方法 Library.如何将 JavaScript 嵌入到 Uno-Platform 跨平台库项目中?
此 link 展示了如何操作 - https://platform.uno/blog/how-to-embed-javascript-components-in-c-built-uno-webassembly-web-applications/
它有两个使用 date/time 选择器控件 Flartpickr 以及语法可视化工具 PrismJS 的示例。
好吧,我很尴尬让它工作起来是多么容易。在我创建我的 Uno Platform Library 项目 using Uno Solution Templates in Visual Studio 2019 之后,我然后:
- 在我的库项目的根目录中创建了一个
WasmScripts
文件夹
- 将我的 JavaScript 文件 (
LibTest.js
) 添加到 WasmScripts
文件夹:
function libTest() {
return 'IT WORKS!';
}
- 创建了一个 class (
Test.cs
),它将在定位 NetStandard
时使用上述 JavaScript 函数——这是 Uno WebAssembly 应用程序使用的目标:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
#if !NETFX_CORE
using Uno.Foundation;
#endif
namespace WasmTricksLib
{
public partial class Test
{
public static string PerformTestAsync()
{
#if __WASM__
var result = WebAssemblyRuntime.InvokeJS("libTest()");
System.Diagnostics.Debug.WriteLine("WasmTricksLib.Test.PerformTestAsync: RESULT=" + result);
return result;
#else
return "NOT THE RIGHT PLATFORM";
#endif
}
}
}
以上结果导致库的项目结构如下:
到目前为止,所有步骤都是我预期的,基于 Uno-Platform 应用程序项目的文档。但是,它不会编译并且 VisualStudio IntelliSense 不会喜欢 Test.cs
.
中的某些代码
解决方案
将以下 <ItemGroup>
添加到 Uno-Platform 库的 .csproj
文件中:
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard2.')) ">
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.1" />
<PackageReference Include="Uno.UI.WebAssembly" Version="3.3.0" />
</ItemGroup>
TL,DR: 如何将 JavaScript 嵌入到 Uno-Platform 跨平台库项目中?
背景
下面是一些关于如何将 JavaScript 库嵌入 Uno 平台的 WASM 平台项目的重要资源 Application(不是 图书馆):
问题
但是,上面没有解决,我也没有找到任何关于如何在 Uno 平台中执行此操作的方法 Library.如何将 JavaScript 嵌入到 Uno-Platform 跨平台库项目中?
此 link 展示了如何操作 - https://platform.uno/blog/how-to-embed-javascript-components-in-c-built-uno-webassembly-web-applications/
它有两个使用 date/time 选择器控件 Flartpickr 以及语法可视化工具 PrismJS 的示例。
好吧,我很尴尬让它工作起来是多么容易。在我创建我的 Uno Platform Library 项目 using Uno Solution Templates in Visual Studio 2019 之后,我然后:
- 在我的库项目的根目录中创建了一个
WasmScripts
文件夹 - 将我的 JavaScript 文件 (
LibTest.js
) 添加到WasmScripts
文件夹:function libTest() { return 'IT WORKS!'; }
- 创建了一个 class (
Test.cs
),它将在定位NetStandard
时使用上述 JavaScript 函数——这是 Uno WebAssembly 应用程序使用的目标:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; #if !NETFX_CORE using Uno.Foundation; #endif namespace WasmTricksLib { public partial class Test { public static string PerformTestAsync() { #if __WASM__ var result = WebAssemblyRuntime.InvokeJS("libTest()"); System.Diagnostics.Debug.WriteLine("WasmTricksLib.Test.PerformTestAsync: RESULT=" + result); return result; #else return "NOT THE RIGHT PLATFORM"; #endif } } }
以上结果导致库的项目结构如下:
到目前为止,所有步骤都是我预期的,基于 Uno-Platform 应用程序项目的文档。但是,它不会编译并且 VisualStudio IntelliSense 不会喜欢 Test.cs
.
解决方案
将以下 <ItemGroup>
添加到 Uno-Platform 库的 .csproj
文件中:
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard2.')) ">
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.1" />
<PackageReference Include="Uno.UI.WebAssembly" Version="3.3.0" />
</ItemGroup>