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

Silverlight 已被微软官方淘汰并停止支持。
- IE 11 是最后一个支持 Silverlight 的主流浏览器,并且微软也已停止对 IE 11 的支持。
- 所有现代浏览器(如 Chrome, Firefox, Edge, Safari)默认不再支持 Silverlight 插件。
- Silverlight 运行时(插件)也不再提供下载。
发布一个 Silverlight 网站在今天已经没有实际意义,任何现代用户都无法在浏览器中运行它,除非你的目标用户是一个完全受控的内部环境,例如公司内部网络,并且你已手动为所有员工的电脑安装了旧版本的 Silverlight 运行时。
如果你仍然需要发布(为了维护一个遗留系统),以下是完整的发布流程和步骤。
Silverlight 网站发布流程
发布 Silverlight 网站主要涉及三个核心部分:

- XAP 文件:这是 Silverlight 应用程序的本身,编译后的客户端代码。
- HTML 页面:承载 Silverlight 控件的宿主页面。
- 服务器端代码:处理数据、业务逻辑和页面渲染的部分(ASP.NET Web Forms 或 MVC)。
以下是详细的发布步骤:
第 1 步:准备发布包
在 Visual Studio 中,右键点击你的 Web 项目(ASP.NET Web Forms 项目),选择 “发布”。
-
选择发布目标:
- 对于初学者,最简单的方式是选择 “文件系统”,你可以指定一个本地文件夹作为发布目标。
- 其他选项包括:
- FTP:直接发布到 FTP 服务器。
- Web 部署 (Web Deploy):更专业的部署方式,需要服务器上安装 Web Deploy Agent。
- Azure App Service:如果网站部署在 Azure 上。
-
配置发布设置:
(图片来源网络,侵删)- 发布方法:选择“发布 Web”。
- 目标位置:选择或输入你要发布到的文件夹路径。
- 配置:通常选择 “Release”,因为它会进行代码优化,移除调试信息,生成更小的文件。
- 目标框架:确保选择正确的 .NET Framework 版本(如 .NET Framework 4.x)。
-
点击“发布”:
Visual Studio 会编译你的项目,并将所有必要的文件复制到指定的目标文件夹中。
发布完成后,你的目标文件夹里会包含以下关键文件:
ClientBin文件夹:这是最重要的文件夹之一,里面包含了你的.xap文件。MyApp.xap。.aspx或.html文件:这些是宿主页面,它们通过<object>或<embed>标签来加载.xap文件。- Web.config:应用程序的配置文件。
- 其他文件:如图片、CSS、JavaScript 等。
第 2 步:理解核心文件的作用
-
XAP 文件
- 本质:这是一个 ZIP 压缩包,包含了编译后的 Silverlight 应用程序代码(
.dll文件)、应用程序清单(AppManifest.xaml)、资源文件(图片等)和引用的程序集。 - 部署:这个文件必须被放在网站的
ClientBin文件夹下,这是 Silverlight 的默认约定。
- 本质:这是一个 ZIP 压缩包,包含了编译后的 Silverlight 应用程序代码(
-
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 中进行一些设置。
-
确保 .NET 版本正确:
- 在 IIS 管理器中,选择你的网站。
- 在“应用程序池”设置中,确保它使用的是与你项目兼容的 .NET Framework 版本(.NET v4.0.30319)。
-
配置 MIME 类型:
- Silverlight 需要特定的 MIME 类型才能被浏览器识别和下载,IIS 通常会自动配置,但最好检查一下。
- 在 IIS 管理器中,选择你的网站。
- 双击“MIME 类型”。
- 确保存在以下两项:
- .xap:扩展名, application/x-silverlight-app:MIME 类型。
- .xaml:扩展名, application/xaml+xml:MIME 类型。
-
处理大文件上传:
- 如果你的 Silverlight 应用有文件上传功能,需要修改
Web.config文件中的httpRuntime节点来增加最大请求大小和最大允许的发送内容长度。<system.web> <httpRuntime maxRequestLength="1048576" executionTimeout="3600" /> <!-- 其他配置... --> </system.web>
- 如果你的 Silverlight 应用有文件上传功能,需要修改
第 5 步:访问和测试
- 在浏览器中输入你的网站 URL。
- 第一次访问时:如果用户的浏览器(如旧版 IE)支持 Silverlight,浏览器会提示用户安装 Silverlight 插件,如果用户使用的是现代浏览器,什么都不会发生,页面只会显示 Silverlight 插件未安装的提示图片(即 HTML 中的
<a>标签内容)。 - 测试:在一个安装了 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),这样
