必须明确一个至关重要的前提

silverlight网站发布
(图片来源网络,侵删)

Silverlight 已被微软官方淘汰并停止支持。

  • IE 11 是最后一个支持 Silverlight 的主流浏览器,并且微软也已停止对 IE 11 的支持。
  • 所有现代浏览器(如 Chrome, Firefox, Edge, Safari)默认不再支持 Silverlight 插件。
  • Silverlight 运行时(插件)也不再提供下载。

发布一个 Silverlight 网站在今天已经没有实际意义,任何现代用户都无法在浏览器中运行它,除非你的目标用户是一个完全受控的内部环境,例如公司内部网络,并且你已手动为所有员工的电脑安装了旧版本的 Silverlight 运行时。

如果你仍然需要发布(为了维护一个遗留系统),以下是完整的发布流程和步骤。


Silverlight 网站发布流程

发布 Silverlight 网站主要涉及三个核心部分:

silverlight网站发布
(图片来源网络,侵删)
  1. XAP 文件:这是 Silverlight 应用程序的本身,编译后的客户端代码。
  2. HTML 页面:承载 Silverlight 控件的宿主页面。
  3. 服务器端代码:处理数据、业务逻辑和页面渲染的部分(ASP.NET Web Forms 或 MVC)。

以下是详细的发布步骤:

第 1 步:准备发布包

在 Visual Studio 中,右键点击你的 Web 项目(ASP.NET Web Forms 项目),选择 “发布”

  1. 选择发布目标

    • 对于初学者,最简单的方式是选择 “文件系统”,你可以指定一个本地文件夹作为发布目标。
    • 其他选项包括:
      • FTP:直接发布到 FTP 服务器。
      • Web 部署 (Web Deploy):更专业的部署方式,需要服务器上安装 Web Deploy Agent。
      • Azure App Service:如果网站部署在 Azure 上。
  2. 配置发布设置

    silverlight网站发布
    (图片来源网络,侵删)
    • 发布方法:选择“发布 Web”。
    • 目标位置:选择或输入你要发布到的文件夹路径。
    • 配置:通常选择 “Release”,因为它会进行代码优化,移除调试信息,生成更小的文件。
    • 目标框架:确保选择正确的 .NET Framework 版本(如 .NET Framework 4.x)。
  3. 点击“发布”

    Visual Studio 会编译你的项目,并将所有必要的文件复制到指定的目标文件夹中。

发布完成后,你的目标文件夹里会包含以下关键文件:

  • ClientBin 文件夹:这是最重要的文件夹之一,里面包含了你的 .xap 文件MyApp.xap
  • .aspx.html 文件:这些是宿主页面,它们通过 <object><embed> 标签来加载 .xap 文件。
  • Web.config:应用程序的配置文件。
  • 其他文件:如图片、CSS、JavaScript 等。

第 2 步:理解核心文件的作用

  1. XAP 文件

    • 本质:这是一个 ZIP 压缩包,包含了编译后的 Silverlight 应用程序代码(.dll 文件)、应用程序清单(AppManifest.xaml)、资源文件(图片等)和引用的程序集。
    • 部署:这个文件必须被放在网站的 ClientBin 文件夹下,这是 Silverlight 的默认约定。
  2. HTML/ASPX 宿主页面

    • 作用:这个页面在浏览器中运行,它的唯一任务就是创建一个“容器”(即 Silverlight 插件实例),并告诉这个容器去哪里加载 .xap 文件。

    • 关键代码:在页面的 <head><body> 中,你会找到类似这样的 Silverlight 初始化脚本(通常由 Visual Studio 自动生成):

      <script type="text/javascript">
          function onSilverlightError(sender, args) {
              // 错误处理逻辑...
          }
      </script>
      <div id="silverlightHost">
          <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
              <param name="source" value="ClientBin/YourAppName.xap"/>
              <param name="onerror" value="onSilverlightError" />
              <param name="background" value="white" />
              <param name="minRuntimeVersion" value="5.0.61118.0" />
              <param name="autoUpgrade" value="true" />
              <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
                  <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>
              </a>
          </object>
      </div>
    • 最重要的参数

      • source="ClientBin/YourAppName.xap":指定了 Silverlight 应用程序的入口点。路径必须是相对于当前页面的

第 3 步:部署到 Web 服务器

将第 1 步生成的所有文件和文件夹,通过 FTP、文件共享或其他方式,完整地复制到你的 Web 服务器(如 IIS)的网站根目录下。

第 4 步:在 IIS 中进行配置(可选但推荐)

如果你的网站需要处理文件上传、使用特定的 .NET 版本或配置 URL 重写,你需要在 IIS 中进行一些设置。

  1. 确保 .NET 版本正确

    • 在 IIS 管理器中,选择你的网站。
    • 在“应用程序池”设置中,确保它使用的是与你项目兼容的 .NET Framework 版本(.NET v4.0.30319)。
  2. 配置 MIME 类型

    • Silverlight 需要特定的 MIME 类型才能被浏览器识别和下载,IIS 通常会自动配置,但最好检查一下。
    • 在 IIS 管理器中,选择你的网站。
    • 双击“MIME 类型”。
    • 确保存在以下两项:
      • .xap:扩展名, application/x-silverlight-app:MIME 类型。
      • .xaml:扩展名, application/xaml+xml:MIME 类型。
  3. 处理大文件上传

    • 如果你的 Silverlight 应用有文件上传功能,需要修改 Web.config 文件中的 httpRuntime 节点来增加最大请求大小和最大允许的发送内容长度。
      <system.web>
      <httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
      <!-- 其他配置... -->
      </system.web>

第 5 步:访问和测试

  1. 在浏览器中输入你的网站 URL。
  2. 第一次访问时:如果用户的浏览器(如旧版 IE)支持 Silverlight,浏览器会提示用户安装 Silverlight 插件,如果用户使用的是现代浏览器,什么都不会发生,页面只会显示 Silverlight 插件未安装的提示图片(即 HTML 中的 <a> 标签内容)。
  3. 测试:在一个安装了 Silverlight 的旧版浏览器(如 IE 11)上进行测试,确保应用程序能正常加载和运行。

重要提醒和现代替代方案

再次强调,发布 Silverlight 网站已经不再是一个可行的 Web 开发策略,如果你正在开发一个新项目,或者需要将现有的 Silverlight 应用迁移,请考虑以下现代替代方案:

技术方案 描述 优点 缺点
SPA (单页应用) 使用 JavaScript 框架(如 React, Angular, Vue)在客户端构建用户界面,通过 API 与后端通信。 现代标准,用户体验好,跨平台,生态丰富。 学习曲线较陡,对 SEO 不友好(需额外处理)。
Blazor 使用 C# 和 .NET 在浏览器中构建交互式 UI,无需 JavaScript。 使用 C#,复用 .NET 生态,开发体验一致。 相对较新,社区和第三方库不如 JS 框架成熟。
传统 MVC/Razor Pages 服务端渲染,每次交互都请求新页面。 简单直接,SEO 友好,开发快速。 用户体验不如 SPA 流畅,页面刷新较多。

迁移建议

  • UI 层:将 Silverlight 的 XAML 界面重构成使用 React, Vue, 或 Blazor 的 UI。
  • 业务逻辑层:将 Silverlight 中的 C# 业务逻辑保留,并封装成 Web API (ASP.NET Core Web API),这样