从一个群里看来的,一哥们刚面试回来,趁着还记得,先放到这儿,有兴趣的可以看看。
职位:前端开发。
Tags: 腾讯
插件(Plug-in,又叫addin、add-in、addon或add-on)是一种电脑程序,通过和应用程序的互动,用来替应用程序增加一些所需要的特定的功能。(Wikipedia)
插件用来扩展nopCommerce的功能,nopcommcer有多种类型的插件。比如支付方式中的paypal,税率供应商,配送计算方式(UPS,USP,Fedex),小部件(live chat功能)等等。nopCommerce本身也自带了很多不同的插件。你可以在官网上搜索是否已经有人上传了满足你需要的插件。如果没有,哥这就手把手带你编写一个出来。
1.你第一件事就是要在解决方案中新建一个“类库”项目。最好的办法是把插件都放在解决方案根目录(不过小心不要和Nop.Web下边的plugins目录搞混了,那儿是放已布置插件的),而且最好把插件也都放在解决方案目录的plugin目录中(关于更多解决方案文件夹的信息,请猛击此处)

最好以这种方法来命名:”Nop.Plugin.{Group}.{Name}”。{Group}是你插件的分类(比如支付),{Name}是你的插件名(比如”AuthorizeNet”),那么Authorize.NET的支付插件就会有这样的名字:Nop.Plugin.Payments.AuthorizeNet。
2.一旦建立了插件项目,把输入路径改为”..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\”,比如 Authorize.NET 支付插件就会有这样的输入路径: “..\..\Presentation\Nop.Web\Plugins\Payments.AuthorizeNet\”。搞定以后,对应的插件DLL就会被拷贝到 \Presentation\Nop.Web\Plugins\ 文件夹,nopCommerce内核会搜索此文件夹。

a.在项目菜单,点击属性
b.选择生成选项卡
c.点击输入路径旁边的浏览按钮选择一个输入目录
你要在debug和release模式下都要做此步骤。
3.下一步你就要为你的每一个插件建立一个Description.txt,此文件包含描述插件的信息。你可以从其它插件目录中拷出来。比如Authorize.NET支付插件的Description.txt就有如下内容:
Group: Payment methods
FriendlyName: Credit Card
SystemName: Payments.AuthorizeNet
Version: 1.00
SupportedVersions: 2.30
Author: nopCommerce team
DisplayOrder: 1
FileName: Nop.Plugin.Payments.AuthorizeNet.dll
其实所有的信息你都能看懂,不过有一些注意事项。SystemName必须唯一。Version字段是你插件的版本号,你可以将它设置为你喜欢的任何值。SupportedVersions可以包含一个由逗号分隔的(确保nopCommerce当前版本包含在此列表中,否则此插件没戏)支持版本清单。FileName是用这个格式:Nop.Plugin.{Group}.{Name}.dll(是你插件的assembly文件名)。要确保此文件的“拷贝到输入目录”属性是“Copy if newer”

4.所需的最后一个步骤是创建一个类实现IPlugin接口(Nop.Core.Plugins命名空间)。nopCommerce有BasePlugin类已经实现了一些IPlugin方法,这样你就不用苦逼地再写一遍。nopCommerce还提供一些从IPlugin派生特定的接口。例如,俺们有“IPaymentMethod”接口,用于创建新的付款插件,它包含了一些特定的用于付款的方法如ProcessPayment()或GetAdditionalHandlingFee()。nopCommerce目前有以下特定的插件接口:
IExternalAuthenticationMethod. 用来建立外部认证方法如 Facebook, Twitter, OpenID, etc.
IWidgetPlugin. 让你可以创建小部件,小部件在你网站的某些地方出现,如左边的Live chat框
IExchangeRateProvider. 用于获得货币汇率.
IDiscountRequirementRule. 允许你创建新的折扣规则比如”帐单寄到的国家必须是……“
ISMSProvider. 短信提供商,让你可以在下单时收到短信通知。
IPaymentMethod. 用于处理支付流程的插件。
IPromotionFeed. 这些插件用于向Froogle或PriceGrabber提供产品信息
IShippingRateComputationMethod..这些插件是用于获取可用的配送方法和正确的运费。例如,UPS,UPS,FEDEX等。
ITaxProvider. 税率提供商用于获取税率。
现在你可以在Admin area > Configuration > Plugins看到我们的插件了,不过正如你所想,这个杯具的插件啥都不能做,甚至连个配置的界面都没有。现在让我们来创建一个配置页面。我们现在需要做的是创建一个控制器,模型和视图。
关于MVC模式在这里你可以找到更多的信息。
那么,我们可以开工了:
创建模型。新插件中加入一个Models文件夹,然后按你需要新加入一个模型类。
创建视图。在插件项目中新加一个Views文件夹,再在里边添加一个{Name}文件夹,此处{Name}是指你的插件名。然后再添加一个Configure.cshtml文件。很重要的一点:此视图应该要注明是嵌入资源。
创建控制器。在插件项目中新加一个controller文件夹,再新加一个控制器类。最好的命名办法是像{Group}{Name}Controller.cs这样如PaymentAuthorizeNetController。再好好地命名一个action方法用于配置。哥叫它“Configure”。准备一个模型类并将其传给这个视图:Nop.Plugin.{Group}.{Name}.Views. {Group}{Name}.Configure,即那个嵌入视图。比如你在Authorize.NET支付插件中的PaymentAuthorizeNetController实现你就会比较清楚。
提示一:从其它插件项目中拷贝web.config到你项目里来,这样在做视图的时候有智能感知(老丁:啊?真的么?这和拷文件有什么关系?)。智能感知即微软的自动完成亮点。
提示二:搞定以上步骤最简单的办法是直接把其它插件项目拷贝过来,然后文件和文件夹改名。
提示三:如果你想限制后台(店主)控制器的一些action方法,只用在方法上加[AdminAuthorize]属性即可。
提示四:接下来要确保所有第三方的程序集引用的“拷贝到本地”属性设为false,这样可以减小部署包的大小。
比如Authorize.NET插件的项目结构会如下图:

现在我们要为插件注册相应的路由。ASP.NET路由用于把浏览器发送的请求映射成MVC控制器相应的action方法,接下来的步骤你会读到很多详细关于路由的信息。
1. 新建如下文件:RouteProvider.cs,它会向nopcommerce告知关于插件路由信息。比如下边的RouteProvider添加了一个新的路由,可以通过浏览器路径http://www.yourStore.com/Plugins/PaymentAuthorizeNet/Configure来访问:
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("Plugin.Payments.AuthorizeNet.Configure",
"Plugins/PaymentAuthorizeNet/Configure",
new { controller = "PaymentAuthorizeNet", action = "Configure" },
new[] { "Nop.Plugin.Payments.AuthorizeNet.Controllers" }
);
}
public int Priority
{
get
{
return 0;
}
}
}
2. 一些特写的插件接口(像上边讲的)和“IMiscPlugin”接口有一个方法“GetConfigurationRoute”。它应该向控制器返回一个用于插件后台配置的路由。实现你插件的“GetConfigurationRoute”方法,可以告知nopCommerce你插件的后台配置路由是什么。如果你插件不需要后台配置,那么此方法将返回NULL,比如下边这样:
public void GetConfigurationRoute(out string actionName,
out string controllerName,
out RouteValueDictionary routeValues)
{
actionName = “Configure”;
controllerName = “PaymentAuthorizeNet”;
routeValues = new RouteValueDictionary()
{
{ “Namespaces”, “Nop.Plugin.Payments.AuthorizeNet.Controllers” },
{ “area”, null }
};
}
只要你有这个配置方法,插件安装以后你就能在Admin > Configuration > Plugins找到一个配置链接。
这是可选步骤。一些插件需要有一定的安装逻辑,比如插件要添加一些本地资源数据。在你的IPlugin实现中(大多数情况下是直接从BasePlugin类继承下来),重载以下方法:
1. Install:在插件安装时会调用此方法,你可以在此初始化任何设置,添加新的本地资源数据或添加新的数据库表(如果需要的话)
2.Uninstall:在卸载插件时会调用此方法。
重要说明:如果你重载这些方法,不要隐藏基类的实现。比如重载”Install”的时候要记得调用base.Install(),Authorize.NET的install方法如下:
public override void Install()
{
var settings = new AuthorizeNetPaymentSettings()
{
UseSandbox = true,
TransactMode = TransactMode.Authorize,
TransactionKey = “123″,
LoginId = “456″
};
_settingService.SaveSetting(settings);
base.Install();
}
提示:已安装的插件列表可以在\App_Data\InstalledPlugins.txt找到,这个列表是在安装的时候创建的。
升级nopCommerce可能会让插件挂掉
一些插件可能在新版本的nopCommerce中挂掉无法工作。如果在升级后有问题,请删除插件再到nopCommerce官网看看是否有些版本的插件下载。大部分的插件作者都会把他们的插件升级到新的版本,不过少数插件并不会跟随着一起升级从而不再支持新版本。不过大多数情况下,你可以打开相应的 Description.txt文件并编辑SupportedVersions字段。
希望此文能让你开始nopCommerce的插件之旅并搞个出类拔萃的插件。
Tags: nopcommerce, 文档
编写本文档是为了向程序员说明nopcommerce的解决方案结构,亦是程序员开发nopcommerce的居家必备良书。首先nopcommerce的源代码很容易拿到,它是开源的,所以你可以直接到网上下载。 在你打开VS以后项目和文件夹都会完整列出来,我们建议你在看此文档的同时也打开你的VS来浏览项目和文件。

绝大多数的项目,目录和文件都顾名思义,你可以从名字就大概知道是做什么的。比如Nop.Plugin.Payments.PayPalStandard这个我都不用看项目代码就能猜到做什么的。
\Libraries\Nop.Core
Nop.Core项目包含nopcommerce的一系列核心类如缓存,事件,辅助类和业务对象(如订单和客户实体类)
\Libraries\Nop.Data
Nop.Data项目包含一系列的数据访问类和方法以从数据库或其他数据媒介读取和保存数据。它也有助于把数据访问逻辑和你的业务对象分离。 nopcommerce使用Entity Framework (EF) Code-First方法,允许你在nopcommerce代码中定义实体 (所有的核心实体类都在Nop.Core中定义),再让EF生成数据库,这就是为什么会叫Code-First。你接下来可以用LINQ来查询对象,它自己会把查询转换为SQL语句并在数据库里执行。nopcommerce拥有牛B的API让你完全定制持久映射,你可以在这儿和这儿找到Code-First的资料。
\Libraries\Nop.Services
此项目包含一系列的核心服务,业务逻辑,验证,如果有数据的话还有数据的计算方法,也就是传说中的业务访问层(BAL)
Plugins是VS的解决方案文件夹,硬盘中它是在你解决方案的根目录下。由于项目在编译时的输入路径是”..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\”,这样插件的DLL会自动地放到 \Presentation\Nop.Web\Plugins\文件夹中,用来放置已部署插件。这样也能让插件包含静态文件比如CSS或JS,就不用在项目之间拷贝这些文件了。
Nop.Admin是一MVC项目,如果你还从没用过ASP.NET MVC,请猛击这儿有更多信息。可能你已经猜到这是表示层中的管理后台,你可以在 \Presentation\Nop.Web\Administration文件夹中找到它,此项目不能运行。
Nop.Web也是一MVC项目,前台网店的表示层,这个才是你真正要跑起来的项目,它也是整个应用程序的起始项目。
Nop.Web.Framework是一个表示层的类库项目,包括可以让后台和前台使用的一些共用的展示功能。
Nop.Core.Tests是Nop.Core的测试项目
Nop.Data.Tests是Nop.Data的测试项目
Nop.Services.Tests是 Nop.Services的测试项目
Nop.Tests是一个类库,包含其它测试项目中要用的一共有类和辅助方法,此项目不包含任何测试用例
Tags: nopcommerce, 文档
以下列出的是程序猿攻城湿在开发nopCommerce的时候经常提出的问题。它们也表现出nopCommerce团队对一些架构的选择。
有哪些要求?
NopCommerce的技术和系统要求可以在这儿找到(英文)
程序猿如何向nopCommerce项目贡献代码?
NopCommerce代码托管在codeplex Mercurial代码库,用户点此访问。借此公共代码库,用户可找到将要发布的修改和以前的设计决策。如果想知道codeplex Mercurial对版本树的支持请在这儿和这儿找更多信息。程序猿可以很容易地在我们的扩展页面上传插件和语言包并分享给他人。要上传扩展,请在浏览器中访问我的帐号,选择“Your contributions and extensions”选项卡,然后点击“Upload a new extension”按钮。
我如何报告一个缺陷?
nopCommerce使用Codeplex作为官方缺陷跟踪系统,如果发现一个缺陷,可通过在Codeplex创建一个任务来报告给nopCommerce团队。程序猿或用户也可以在我们的Bug Reports论坛版块发帖子来告知新发现的缺陷。如果你的缺陷已经被记录当然最好,正因为此,验证那些没有被记录的缺陷更为重要(比较拗口)。报告重复的缺陷会分心而且让我们在新的开发和改缺陷上时间更少。
nopCommerce的数据访问层
Nop.Data项目包含一系列的类和函数来读取和写入数据库或是其它数据存储介质。Nop.Data项目有助于将数据访问的逻辑从你的业务对象中分离出来。NopCommerce使用Entity Framework (EF) Code-First,Code-First允许程序员在源代码中定义实体(所有核心实体都在Nop.Core项目中定义),然后使用EF来生成基于C#类的数据库,这就是为何被称为Code-First。你可以用LINQ来查询你的对象,它会悄悄地把代码转化为SQL语句并在数据库执行。Nopcommerce有流利的API用于完全定制化的持久映射。如果想了解更多Code-First请访问这儿和这儿
控制反转和依赖注入
控制反转和依赖注入是两个密不可分的方法用来分离你应用程序中的依赖性。控制反转Inversion of Control (IoC) 意味着一个对象不会新创建一个对象并依赖着它来完成工作。相反,它们从外部获取它们想要的对象。依赖注入Dependency Injection (DI) 意味着在没有对象的干预下,一般通过能传入构造参数和一系列属性的框架组件完成。马丁虎老二(Martin Fowler)写过一篇关于依赖注入和控制反转的牛B文章,我就不要再抄到这儿了,你可以在这儿找到。NopCommerce使用Autofac类库作为IOC容器。只要你写了一个服务和此服务已实现的适当接口,你应该在任何实现了IDependencyRegistrar接口(Nop.Core.Infrastructure.DependencyManagement 命名空间).的类里注册它。比如所有nopCommerce的核心服务都在Nop.Web.Framework类库的DependencyRegistrar类中已注册。
public class DependencyRegistrar : IDependencyRegistrar
{
public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)
{
builder.Register(c => c.Resolve().Request) .As() .InstancePerHttpRequest(); builder.Register(c => c.Resolve().Response) .As() .InstancePerHttpRequest();
你想创建多少依赖注册类都可以。每一个类实现了IDependencyRegistrar接口的类都有一个Order属性,可以用它来替换一个现有的依赖。要覆盖nopcommerce的依赖,设置order属性为大于0。Nopcommerce会对依赖排序,并按顺序运行,数字越大你的对象越迟被注册。
我如何注册新的路由(路由?我觉得还是用routes比较好呢?)
ASP.NET路由主要用于接受进来的浏览器请求并把它映射到具体的MVC控制器action上。在此有更多信息。Nopcommerce有一个叫IRouteProvider的接口,用于在应用程序开始时注册路由。所有的核心路由都在Nop.Web项目中的RouteProvider注册。
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{
//home page
routes.MapLocalizedRoute(“HomePage”,
“”,
new { controller = “Home”, action = “Index”},
new[] { “Nop.Web.Controllers” });
你想创建多少RouteProvider都可以。比如,如果你的插件有定制路由,需要注册,于是你可以创建一个实现IRouteProvider接口的新类,再根据插件具体注册路由。
数据校验
数据校验是一个用以保证程序操作干净,正确和有用数据的流程。很多.NET程序猿使用Data Annotation Validators,不过nopCommerce用的是Fluent Validation,一个有着文艺青年般的接口和lambda表达式构成的.NET的小型验证库,用以生成符合你业务需求的校验规则 。在nopCommerce中你必须要通过2步来添加一个校验到一些模型中:1.创建一个继承自AbstractValidator的类并把所有必须的验证逻辑都放入其中,看下边这些应该有所启发:
public class AddressValidator : AbstractValidator { public AddressValidator(ILocalizationService localizationService) { RuleFor(x => x.FirstName) .NotEmpty() .WithMessage(localizationService.GetResource(“Address.Fields.FirstName.Required”)) .When(x => !x.FirstNameDisabled);
2.给你的模型类加上ValidatorAttribute属性,比如下边代码:
[Validator(typeof(AddressValidator))]
public class AddressModel : BaseNopEntityModel
{
当一个视图模型被提交到控制器,ASP.NET会执行相应的校验。
计划任务
有了计划任务,你可以安排一个任务在指定的时期里,在后台运行。比如nopCommerce会定时地发送队列中的email。任务是在ASP.NET线程池中由单独的线程执行。创建一个新的任务有如下基本步骤:
事件暴露和处理
事件是把消息广播给感兴趣的部分。事件是由数据驱动的如添加,更新和删除数据。NopCommerce允许程序员“监听”他们感兴趣的事件。程序员要想玩转事件基本上有如下两条路走,一个程序员要么发布某个事件让其它人来用,要么用别的程序员编好并发布的事件。
设置API
正如其它网站平台,nopCommerce也有例如“网店名称”或“启用单页购买”这类设置,在nopCommerce中有两种办法来管理设置。
你可以用实现ISettingService接口的方法SetSetting和GetSettingByKey来加载和保存单个设置。而在nopCommerce中最牛B的处理设置的办法是创建一个ISettingService接口的新实现。每个设置将变为C#属性,程序员在需要时应该使用setting类构建函数注入设置。以下是setting类的示例代码。
/* 小结:本文是按老丁于原文之理解而翻译,并非出版社那种按字词翻译风格。欢迎各位提出意见,也欢迎各位转载不过务必注明本文原址。更多 nopcommerce的文章请关注http://www.dingsea.com/?tag=nopcommerce,或者加入我们的QQ群 101675096讨论。
*/
public class MediaSettings : ISettings
{
public int AvatarPictureSize { get; set; }
public int ProductThumbPictureSize { get; set; }
public int ProductDetailsPictureSize { get; set; }
public int ProductThumbPictureSizeOnProductDetailsPage { get; set; }
public int ProductVariantPictureSize { get; set; }
public int CategoryThumbPictureSize { get; set; }
public int ManufacturerThumbPictureSize { get; set; }
public int CartThumbPictureSize { get; set; }
public bool DefaultPictureZoomEnabled { get; set; }
public int MaximumImageSize { get; set; }
}
Tags: nopcommerce, 文档
最近都比较忙,一直没有时间打理博客。
nopcommerce官网出来了开发文档,可以让广大开发者更容易的看懂nopcom这个开源产品,更容易地上手。我准备在有空之余也从它的开发文档学起,同时也翻译成中文,这样一来让自己也学习到了知识,二来文档翻译国内开发者也能有参考资料。
Tags: nopcommerce, 开发
10月底我们去了乌敏岛。岛上还保留了新加坡上世纪60年代的风貌,富于乡村的气息,这里的生活步调,比起过于城市化的本岛,明显慢了许多。值得一提的还有坐船到岛上的樟椬村码头,真的是一个养老的好地方,同样远离城市,物价便宜,但人气又很旺,以后要是老了,能搬到这儿来也不错,呵呵。
从樟椬村码头到乌敏岛只要10分钟,船票一人2块5,便宜,而且是上船才收钱,看着慢慢离开暄哗的城市,人也没那么累了:
周末果然人多,码头附近的集市好不热闹,以租车店,饭店(海鲜)居多,人也多,路面没有新加坡那么平整,我又想起了我们以前的越南之行:

由于我们一共四人,登岛以后我们没有租自行车,而是包了一部面包车直接到湿地保护区进行徒步之旅,面包车单边12元,不贵。从这儿开始见识乌敏岛的真实面貌了,小路两边都是高大的树木:

走了大约10来分钟,来到珊瑚观察区,其实以目前的海水透明度,完全是看不到的,不错的是有一个海上长廊,可以在上边吹海风看天空看飞机看各种风景,不爽的是走路的时候头顶太阳,太晒:



走过了海上长廊,可以看可爱的小动物了,其实,就是很多很多的螃蟹,远远的看上去一大片红的:



再来个浓黑密林中的红色小螃蟹的闪光照,他们也超喜欢挖洞,湿地的地价并不会因为螃蟹太多而升值:
一小条滩涂鱼也来凑热闹:
不要为以只有红色的螃蟹,也有黑色的:
因为靠近机场,每一两分钟就有飞机起飞或降落:
岛上不只是有昆虫啊什么的,也有哺乳类动物,比如可爱的猪妈妈和它的猪宝宝:
啊,前边那个背包包的是哪个?莫非是?????
在新加坡,这样的建筑几乎消失,这就是70年代的经典新加坡房子,人称甘榜:
再来两张亚热带植物照,我看这种照片,居然联想到越战:

下午时分,潮水退去,水坑里是什么?什么小动物?可怕啊,有木有???
遥望对面的新加坡,该回去啦

前一星期众小卖家因为淘宝调整费用问题,被逼围攻大卖家来吸引眼球。这一下子让我想起前几年新加坡航空(SIA)机师罢工,和这比较像,不同的只是机师没有围攻飞机,而是停飞表示不满,而SIA拒绝涨工资,大概是因为经济危机吧。最后新加坡工会NTUC从中调停,三方你来我往N个月,最后NTUC说,根据我们的调查,机师薪水偏低,SIA有义务为其机师涨薪X%,事件以SIA被迫上涨工结束。不要以为你SIA一家独大就可以乱来,只要你举动不合理,政府插手你一样乖乖的。
转眼看淘宝涨价一事,这么庞大的平台,如此大的动作,我们政府居然没有动作,只说个密切关注,我估计最后也只是把问题推回给淘宝和小商家,尽量做到“事不关已”
淘宝的涨价举动合法但不合理,可惜在中国我一直没有听说有什么工会或组织能有这样的权力或能力裁决一个公司的行为是否合理,大致某公司的举动只要合法就OK了。此事件也说明中国对电子商务的监管不力,像淘宝这么大的平台,在中国电商行业一直被冠以老大称号,结果就是大家叫老大叫久了,他就真成老大了,老子说涨就涨,行为是完全合法滴。可是说不通啊,你为什么涨?减少假货?涨价能减少假货,那为什么房价这么高还是有豆腐渣呢?涨价对小商家影响是什么?你有什么方式对受影响的小商家弥补?而且全是翻倍的涨,这么几个月的时间,小商家根本没有回旋的余地,也难怪要咬你一口。你要逼小商家退出,人家投的钱就全打水漂,换我我也咬你咯。
老婆不能在人多的地方待,又想出去走走,于是和老婆一起去麦里芝蓄水池小走一下。
走的距离不远,顺着入口进去大约只有几百米或1公里,主要休息和放松,对于我这种长年打键盘的人来说也是有大大的好处。
水池入口有一大厅,可供大家休息,小照一张:
水池的泻洪道就在入口,相当巨大的管道:
从这管道转过头来,就能看到水池了,我第一句话就是“哇,好大的鱼塘”:
沿着鱼塘长长的小路走,岸边葱葱郁郁的树木发出阵阵鸟叫,其实林子不大,一样什么鸟都有:
走在小路上,如果你俯看水中,起初你会觉得真是一潭死水,但如果你仔细观察三四分钟,你会发现其实它充满了生机,我们看到很多小鱼,水里的小昆虫,蜻蜓:
而且在小路旁还有一名摄影爱好者,唏嘘啊,以前我也想成为一名摄影爱好者,后来发现骨子里根本没这DNA:
再往里去,偶尔还能遇到小猴子,它们不怕人,应该说它们直接无视人:
this is preview of the nopcommerce template for version 2.0(now is upgrading to MVC 2.1), this template is for fashion/wedding related site only. contact me if you are interested.
Tags: contact, download, mvc, nopcommerce, skins, template, theme
原来一直想等微软推送windows phone的芒果升级,结果新研发的手机都有了,我们老的反而还没动静,干脆自己搞定算了。
首先是在网上找到一个很有用的升级步骤PDF,打开来看第一感觉就是字多页长,其实细细读起来很容易,步骤前面是声明,最后是排错信息,如果大家安步骤来,前后的信息基本可以忽略。
简单来说,升级很简单:
1.你的zune版本要正确,不能新也不能旧
2.下载2个在pdf中提到的升级包
3.只要Zune版本正确,打好升级包后就可以不用管了,zune会一路自动给你升级到mango.
Mango升级,第一给人感觉最明显的是速度。机器整体来说反应变快,很爽!第二就是支持中文,这篇博客就是用升级后的wp7打出来的。IE升级到9似乎还没有发力,有待观察,但是把以前的收藏夹换成文字而且要比以前多按一次按钮才能看到,这个在体验上不是很好。个人觉得这次的升级有意削弱了le,转而强化了其他地方比如market place和social networking.
但是总的来说mango的进步很大。
Tags: mango, Windows phone 7