你的 Silverlight 应用程序真的必须以 .XAP 结尾吗?
我们将探讨 Silverlight 应用程序是否必须以 .XAP 结尾。
引言
我们从书籍、演讲者甚至微软那里听到过:“在托管 Silverlight 应用程序时,请确保你的文件以 .XAP 结尾”。但它真的必须以 .XAP 结尾吗?
答案
答案令人惊讶的是 否。是时候结束一个神话了,即在托管 Silverlight 应用程序时,它必须以 .XAP 结尾。让我们先看一个示例 Silverlight 项目。
文件 -> 新建项目
当你创建一个新的 Silverlight 项目并检查 ClientBin 文件夹时,你会看到文件名以 .XAP 结尾。
你认为如果我们把这个文件重命名为 .zip 并更新我们的托管页面,使其如下所示会发生什么?
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/EndInXapIsCrap.zip"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0"
style="text-decoration:none"><img src="http://go.microsoft.com/fwlink/?LinkId=161376"
alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame"
style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
好的,现在这很有趣。
如果我们运行该应用程序,它将像使用名为 .XAP 的文件一样工作。我们可以查看 Silverlight 应用程序的页面源代码来验证这一点。
让我们检查一下我们的实际 Silverlight 项目发生了什么。创建了一个新的 .XAP 文件,但它保留了我们的 .ZIP 文件不变。
让我们尝试另一个扩展名
如果它适用于 .zip,那么其他任何扩展名呢?让我们尝试一个虚假的扩展名,比如 .MIKE。正如你所看到的,它也有效。
Silverlight 项目属性呢?
所以现在你可能在想,我们不能在 Silverlight 项目中更改文件名,然后它就会固定下来吗?答案是,你可以,但你在保存项目后它会改回来。
默认文件名:EndInXapIsCrap.xap。
新文件名 - 注意 .zip 文件:EndInXapIsCrap.zip。
保存项目后,它会自动将 .xap 附加到你输入的所有文件名 (EndInXapIsCrap.zip.xap)。
那么,这一切的意义是什么?
如果服务器不允许添加 MIME 类型,那么你可以重命名为任何你选择的扩展名。你还可以设置一个构建后事件来运行一个批处理文件或任何其他文件,并将 .XAP 重命名回我们想要的任何扩展名。这是一个非常巧妙的技巧,我希望有人觉得有用。