热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Silverlight3学习笔记(2):Silverlight初接触

创建Silverlight项目当我们创建一个Silverlight项目时会提示是否创建一个承载项目,如下图所示:由于在VS2010中已经直接支持创建ASP.NETMVC2的Web项目,所以承载Silverlight的Web项目类型有三种:ASP.NETWeb应用程序项目、ASP.NET网站及ASP.NETMVCWeb

创建Silverlight项目 当我们创建一个Silverlight项目时会提示是否创建一个承载项目,如下图所示: 由于在VS2010中已经直接支持创建ASP.NET MVC2的Web项目,所以承载Silverlight的Web项目类型有三种:ASP.NET Web应用程序项目、ASP.NET 网站及ASP.NET MVC Web


创建Silverlight项目
当我们创建一个Silverlight项目时会提示是否创建一个承载项目,如下图所示:

由于在VS2010中已经直接支持创建ASP.NET MVC2的Web项目,所以承载Silverlight的Web项目类型有三种:ASP.NET Web应用程序项目、ASP.NET 网站及ASP.NET MVC Web应用程序项目。ASP.NET Web应用程序项目可以提供与Visual Studio .NET 2003 Web 项目相同的 Web 项目语义,它的编译模型与 Visual Studio .NET 2003 编译模型类似。项目中的所有代码文件(独立文件、代码隐藏文件以及类文件)将被编译成单个程序集并存储在 Bin 目录中。由于编译会创建单个程序集,因此可以指定程序集名称和版本等属性。如果我们仅仅是开发Silverlight的话,这个可以随便选择一种类型,以便能在网页中查看Silverlight的运行效果。
VS2010界面
创建Silverlight项目成功之后可以看到如下的界面:


在VS2010中可以直接从工具箱中向Silverlight界面中拖控件。在开发ASP.NET时一个页面会分为两部分.aspx.cs和.cs,前者包含了设计代码,后者则是包含业务逻辑代码,和ASP.NET开发一样,Silverlight的项目中每个控件或者页面也是分为.xaml和.xaml.cs,.xaml代码也是包含设计代码,.xaml.cs则是包含业务逻辑代码。在每个Silverlight项目中默认会有一个app.xaml文件,这个文件有点类似于WinForm项目中的program.cs类,包含了项目启动时的设置,在创建一个Silverlight项目成功后app.xam.cs的代码如下:


可以在Application_Startup()方法中通过设置RootVisual属性来指定启动那个页面作为Silverlight的启动界面。
关于XAML
在Silverlight中使用XAML作为Silverlight的界面设计语言,XAML是一种特殊的XML格式(就像XHTML也是一种特殊的XML格式一样),现在我们不用太关注它,经过以后的练习就会慢慢理解XAML语言的特点。下面是一个普通的XAML页面代码:


Silverlight项目的编译
大家都知道.NET项目都可以使用csc.exe编译,其实VS在编译项目是也是调用了csc.exe的,所以对于平常的简单的想法的代码测试周公都是用记事本写代码然后在命令行下调用csc.exe编译。用VS编译项目最终也会调用csc.exe来编译,和以前编译.NET项目不同的是,编译Silverlight项目多加了一个命令行参数,这个命令行参数是“nostdlib”,它的作用说明如下:

从上图可以看出,使用“nostdlib”参数的作用是不引用标准库。在.NET类库中核心类库是mscorlib.dll,使用这个参数的作用就是不引用mscorlib.dll这些类(因为Silverlight要跨操作系统要支持多浏览器,所以不能带有Windows系统的特色)。尽管在Silverlight中可以使用C#或者VB.NET编程,但是Silverlight中所使用的是.NET类库的子集,在某些用法上受到限制。甚至有些类或者有些方法出现在Silverlight的运行环境中,但是这些类和这些方法并不能为开发者所用,所幸的是为了不必要的麻烦在编写代码时出现的智能感知中不会出现这些类或者这些方法。
当我们编译Silverlight项目成功之后会得到一个dll文件,它的文件结构如下:

也就是除了一个dll文件之外还会生成如下文件:
一个.pdb文件。假设Silverlight项目名为SilverlightDemo1,那个pdb文件名为SilverlightDemo1.pdb,这个文件包含了VS需要的调试信息。
一个名为AppManifest.xaml的文件。不管Silverlight项目名是什么,这个文件名总不会变,在这个文件里包含了当前Silverlight项目所需要的程序集。在本实例中AppManifest.xaml的内容如下所示:

一个测试用的html文件。假设Silverlight项目名为SilverlightDemo1,那个html文件名为SilverlightDemo1TestPage.html,即{Silverlight项目名}TestPage.html,也就是会以Silverlight项目名加TestPage作为文件名的html文件。这个文件文件演示了如何在页面中嵌入Silverlight控件,它的代码如下:


从代码中可以看到,如果浏览此页面的客户端没有安装Silverlight客户端的话,就会看到一个下载安装Silverlight客户端的提示,用户点击链接就可以跳转到微软官方网站下载Siverlight。下载完成会提示用户是否安装。也就是在下载和安装Silverlight时都会得到明确的提示,用户可以明确地选择是否下载或安装,这一点很值得国内的公司学习。国内很多以“正当”、“安全”自居的公司提供的软件总是模糊、混淆某些概念来达到自己不可告人的目的,甚至还有几款装机量上亿的软件经常扫描用户的非系统盘之外的敏感区域,这些公司都应该好好学习一下国外软件的做法。
一些dll文件。这些dll文件是运行当前Silverlight项目所需要的依赖文件。在AppManifest.xaml文件中我们看到了里面有除SilverlightDemo1.dll之外的如下文件:
System.ComponentModel.DataAnnotations.dll
System.Windows.Controls.Data.dll
System.Windows.Controls.Data.Input.dll
System.Windows.Controls.dll
System.Windows.Controls.Navigation.dll
System.Windows.Data.dll
zh-Hans/System.ComponentModel.DataAnnotations.resources.dll
zh-Hans/System.Windows.Controls.resources.dll
zh-Hans/System.Windows.Controls.Data.resources.dll
zh-Hans/System.Windows.Controls.Data.Input.resources.dll
zh-Hans/System.Windows.Controls.Navigation.resources.dll
zh-Hans/System.Windows.Data.resources.dll
在上面的文件都是运行Siverlight项目的依赖文件。其中zh-Hans文件夹中的文件都是一些资源文件,当然除了zh-Hans之中的文件之外,还有其它类似于zh-Hans文件夹的文件夹,它们里面的文件文件名和zh-Hans文件夹下的文件名一样,这些文件是语言资源文件。
说到Silverlight项目的依赖文件就不得不说一下Silverlight项目的核心文件。大家知道Siverlight程序是被下载到客户端执行的,所以需要在客户端安装Silverlight运行环境,为了方便在不同网络环境下的用户下载和安装Silverlight运行环境,所以这个运行环境要尽可能的精简(实际上只有5M),既然它被精简了所以自然不可能提供.NET Framework提供的所有功能。在Silverlight运行环境中包含了如下程序集:
mscorlib.dll:注意此mscorlib.dll非.NET Framework中的mscorlib.dll,不过在Silverlight运行环境中它提供了类似于NET Framework中的mscorlib.dll的功能,是Silverlight运行环境中核心类库(核心中的核心)。
System.dll:提供了泛型、URI处理及正则表达式相关功能的类。
System.Core.dll:提供了对LINQ的支持。
System.Net.dll:提供了网络功能,这样我们下载Web文件和创建基于Socket的网络连接。
System.Window.dll:提供在Silverlight中创建UI的类。
System.Window.Browser.dll:提供了对HTML元素交互操作的类。
System.Xml.dll:提供了XmlReader和XmlWriter两个类用以处理Xml。
可以看出在AppManifest.xaml中出现的那些除SilverlightDemo1.dll之外的dll都没有在Silverlight运行环境所提供的核心类库中。前面说了Siverlight运行环境的设计理念是尽可能使其安装和下载体积小,所以Siverlight运行环境的设计者在核心类库之外又提供了一些类,这些类提供的功能并不是在每个Silverlight应用中都会用到(如果总会用到就会放到核心类库中了),所以以附加类库的形式提供。当利用VS编译Silverlight项目的时候,VS会自动检测那些本项目需要但又不在Silverlight核心类库中的dll,所以我们会在bin目录下会看到一些“不知道怎么跑出来的”dll文件。
在这些附加类库中经常会用到的dll有如下几个:System.Window.Controls.dll、System.Window.Controls.Data.dll、System.Window.Controls.Data.Input.dll、System.Window.Controls.Input.dll及System.Windows.Controls.Navigation.dll,确实这几个文件都在我们的AppManifest.xaml文件中出现了。
一个.xap文件。同样假设Silverlight项目名为SilverlightDemo1,那个xap文件名为SilverlightDemo1.xap,这个xap文件其实是一个压缩文件,我们可以直接使用WinRAR或者其它压缩软件打开这个xap文件(如果不嫌麻烦可以将SilverlightDemo1.xap改名为SilverlightDemo1.xap.zip再用解压软件打开)。下图是使用WinRAR直接打开SilverlightDemo1.xap的情景:

从上图中我们看到了前面提到的AppManifest.xaml和SilverlightDemo1.dll文件以及上面提高的“一些”dll文件,这些dll文件都是在AppManifest.xaml中出现过的、SilverlightDemo1项目所需的附加dll。适用xap的方式发布Silverlight有两个好处:一是xap文件是压缩过的文件,可以减少网络流量以提高下载速度;二是便于部署,如果你想部署Silverlight部署到别某个网站仅仅需要将这个xap文件拷贝到网站所在的目录然后创建一个嵌入Silverlight的页面就够了,超级简单。
Silverlight项目的部署
前面讲到部署Silverlight项目需要的仅仅是一个xap文件和一个包含了如何设置Silverlight项目的网页文件。有时候出现这样的情况,创建项目的时候取了一个名字,到最后发布的时候觉得这个名字不直观,那么我们可以通过VS来设置最终生成的Silverlight项目的文件名,具体方法就是在Silverlight项目上点击鼠标右键选择“属性”,出现如下窗口:

从上图可以看出,在这个面板中我们可以指定如下跟Silverlight项目有关的东西:
应用程序集名称:即最终生成的dll文件名;
默认空间名:即创建代码文件时默认所使用的namespace名称;
启动对象名:可以看出为什么在App.xaml中的Application_Startup()方法中指定启动那个窗体就会启动那个窗体,因为默认是启动App对象的,所以它的制定才有用,如果在项目中创建了多个类似于App.xaml的文件,则会在这里出现多个选择;
生成的Silverlight应用的版本:如果安装了多个Silverlight SDK的话,这里会有多种选择;
最终生成xap文件名:可以将其改为更直观的名字。

从本篇前面的讲解可以知道Silverlight最终会被下载到客户端运行,客户端下载到的是一个xap文件,这个xap文件从本质上来说其实就是一个压缩文件。如果解压这个文件就可以得到Silverlight项目的dll文件,遇上有心人是可以利用一些反编译工具得到源代码的,如下图就是使用著名的反编译软件Reflector打开本篇中的dll文件的情形:

从图中可以看到利用这个软件可以很方便地查看没有经过任何处理的.NET程序集或者Silverlight程序集代码(以MSIL形式存储的),所以为了安全起见不要再Silverlight中保存任何隐私的、安全相关的数据。除此之外还可以对生成的程序集进行进行加密或者混淆,加密就是利用MSIL指令的一些特点使反编译工具无法反编译出源代码,混淆时是对程序集中的变量名和方法名加以变化,使其不再具有望文知义的特点从而达到了即使反编译得到了源代码也难以阅读的目的。在VS中本身就提供了一个代码混淆工具Dotfuscator的社区版,这是一个免费但功能有限的.NET代码混淆工具,它的界面如下:

如果是一般的项目,可以使用Dotfuscator进行混淆,这样可以使一般的窥探者望而生畏。
对于软件的代码保护是一个长期以来一直在探讨的话题,在本篇里提出来只是让大家有这方面的意识,而不是让大家把大部分精力都放在如何组织窥探自己的源代码上了。对软件源代码的反保护和保护一直是矛和盾的问题,二者相互竞争相互发展,不管使用什么语言都难以彻底有效地避免这个问题。
总结

2010-09-13

推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • Linux环境变量$PATH的作用及使用方法
    本文介绍了Linux环境变量$PATH的作用及使用方法。$PATH是一个由多个目录组成的变量,用冒号分隔。当执行一个指令时,系统会按照$PATH定义的目录顺序搜索同名的可执行文件,如果有多个同名指令,则先找到的会被执行。通过设置$PATH变量,可以在任何地方执行指令,无需输入绝对路径。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Javascript中带有加号 - 减号(±)的极坐标曲线方程 - Polar curve equation with plus-minus sign (±) in Javascript
    IamtryingtodrawpolarcurvesonHTMLcanvasusingJavascript.WhatshouldIdowhenIwanttoco ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
author-avatar
氣質正妹_384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有