
本文旨在解决从 internet explorer 11 迁移至 microsoft edge 时,原先通过 `
背景:IE11 与。NET 组件的遗留集成方式
在 Internet Explorer 11 时代,开发者常利用 html 的 <Object> 标签结合 classid 属性来直接加载和调用客户端的 COM 或 ActiveX 组件,其中包括基于。NET Framework 编写的 DLL。这种方式允许 Web 应用程序与本地系统资源进行深度交互,例如:
<object id='example' name='example' classid='Example.dll#org.exam.Sample' VIEWASTEXT></object>
上述代码片段尝试加载名为 Example.dll 中的 org.exam.Sample 类。然而,随着 Web 技术的发展和安全标准的提升,现代浏览器如 Microsoft Edge 已经放弃了对 ActiveX 和 COM 组件的原生支持。这意味着,当应用程序从 IE11 迁移到 Edge 时,这种依赖 <object> 标签直接调用。NET DLL 的机制将不再工作。
现代解决方案:在 Edge 中集成。NET 功能
为了在 Microsoft Edge 中继续利用现有的。NET 逻辑或实现类似的功能,开发者需要采纳符合现代 Web 标准的替代方案。以下是两种主要的策略:
方案一:使用 Blazor 进行客户端 C# 代码执行
Blazor 是微软推出的一个 Web 框架,它允许开发者使用 C# 和。NET 构建交互式的客户端 Web ui。Blazor 通过 WebAssembly 技术,使得编译后的。NET 代码可以直接在浏览器沙箱中运行,而无需插件或额外的运行时。
工作原理:
- C# 到 WebAssembly: 您的 C# 代码(包括业务逻辑和 UI 组件)被编译成 WebAssembly 字节码。
- 浏览器执行: WebAssembly 文件被浏览器下载并在其沙箱中执行。
- dom操作: Blazor 通过javaScript 互操作性(js Interop)来更新和操作浏览器的 DOM,实现用户界面。
优点:
- 全 栈C# 开发: 可以在 前端 和后端都使用 C#,减少语言切换成本。
- 代码复用: 现有。NET 库和业务逻辑可以更容易地迁移和复用。
- 高性能: WebAssembly 提供接近原生代码的执行速度。
- 安全性: 代码在浏览器沙箱中运行,遵循 web 安全 模型。
实施概述: 要将原先 DLL 中的逻辑迁移到 Blazor,您通常需要:
- 创建 Blazor 项目: 根据需求选择 Blazor WebAssembly 或 Blazor Server 项目。
- 重构 .NET 逻辑: 将 DLL 中的核心业务逻辑提取并 封装 为 C# 类库,供 Blazor 应用引用。
- 构建 UI 组件: 使用 Razor 组件(.razor 文件)来构建用户界面,并在需要时调用重构后的 C# 逻辑。
- javascript互操作(如需): 如果需要与浏览器特定的 JavaScript API 或第三方 JS 库交互,可以使用 Blazor 的 JS Interop 功能。
示例(概念性): 假设原 DLL 中有一个计算服务,现在可以将其封装在 Blazor 组件中:
// Example.Client/Services/SampleService.cs namespace Example.Client.Services {public class SampleService { public string GetSampleData() {// 模拟原 DLL 中的复杂逻辑 return $"Data from Blazor .NET component at {DateTime.Now}"; } } } // Example.Client/Pages/Index.razor @page "/" @inject Example.Client.Services.SampleService SampleService <h1>Hello, Blazor!</h1> <p>@message</p> <button @onclick="LoadData">Load Data</button> @code {private string message = "Click the button to load data."; private void LoadData() {message = SampleService.GetSampleData(); } }
方案二:通过 ClickOnce 启动桌面应用程序
如果您的。NET DLL 实际上是一个包含丰富功能的桌面应用程序,并且您希望从 Web 页面触发其启动,那么 ClickOnce 是一个合适的解决方案。ClickOnce 是微软提供的一种部署技术,允许用户通过 Web 链接或网络共享轻松安装和运行 windows 桌面应用程序。
工作原理:
- 发布应用程序: 将您的。NET 桌面应用程序发布为 ClickOnce 部署包(.application 文件)。
- Web 链接: 在 Web 页面中提供一个指向该。application 文件的链接。
- 浏览器启动: 当用户点击该链接时,Edge 浏览器会识别这是一个 ClickOnce 部署,并提示用户安装或启动关联的桌面应用程序。
- 应用程序执行: 应用程序在用户本地机器上独立运行,拥有完整的桌面应用权限。
优点:
- 利用现有桌面应用: 无需重写整个桌面应用程序。
- 易于部署和更新: 自动更新机制简化了维护。
- 全功能桌面体验: 应用程序可以访问本地资源,提供比 Web 应用更强大的功能。
实施概述:
- 准备桌面应用程序: 确保您的。NET 桌面应用程序(WinForms, wpf等)功能完善。
- 启用 ClickOnce 发布: 在 visual studio 中,为项目启用 ClickOnce 发布。配置发布路径、更新选项等。
- 生成部署文件: 发布应用程序会生成一个。application 文件和相关的部署文件。
- Web 页面集成: 在您的 SpringFramework 应用程序或其他 Web 页面中,提供一个指向 ClickOnce 部署文件的链接。
示例(概念性): 在您的 Web 页面中,可以这样提供 ClickOnce 应用程序的启动链接:
<p> 点击下方链接启动您的桌面应用程序:</p> <a href="http://yourserver.com/YourDesktopApp/YourApp.application"> 启动桌面应用程序 </a>
当用户点击此链接时,如果未安装,浏览器会引导用户安装;如果已安装,则会直接启动应用程序。
注意事项与选择建议
- 安全模型: Blazor 运行在浏览器沙箱中,受 Web 安全模型限制;ClickOnce 应用作为桌面程序运行,拥有更高的权限,但需要用户明确信任。
- 用户体验: Blazor 提供无缝的 Web 体验;ClickOnce 会启动一个独立的桌面窗口,可能在用户感知上与 Web 应用分离。
- 开发复杂性: 迁移到 Blazor 可能需要对现有代码进行较大程度的重构,特别是涉及 UI 的部分。ClickOnce 则更多是部署层面的工作。
- 功能需求: 如果需要与 操作系统 进行深度交互(如访问文件系统、硬件设备),ClickOnce 通常是更直接的选择。如果目标是构建纯 Web 端的 C# 应用,Blazor 更合适。
- 部署环境: Blazor 应用部署为静态文件或托管在 ASP.NET Core 后端。ClickOnce 需要一个 Web 服务器来托管部署文件。
总结
从 IE11 迁移到 Microsoft Edge,意味着告别了基于 ActiveX/COM 的传统。NET 组件集成方式。面对这一挑战,开发者应拥抱现代 Web 技术。Blazor 通过 WebAssembly 为客户端 C# 代码执行提供了强大的平台,实现了全栈。NET 的 Web 开发体验;而 ClickOnce 则为从 Web 页面启动功能丰富的桌面应用程序提供了便捷的途径。根据项目的具体需求、现有代码结构以及对用户体验的期望,选择最适合的方案,将有助于平稳过渡并充分利用。NET 生态系统的优势。