2008年10月23日
最近用VS2008开发Windows Mobile程序,使用C#、.NET Compact Framework,发现项目生成速度比较慢。用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长,编译速度巨慢,最慢达到5分钟之久,实在无法忍受。
决定找出VS2008生成时,做了什么花费时间的工作。从工具à选项进入“选项”对话框
选择“MSBuild项目生成输出详细信息”为“诊断”这样编译时,会输出具体执行了那些任务,花费了多少时间。
结果发现最花费时间的是
Platform Verification Task
http://blogs.msdn.com/vsdteam/archive/2006/09/15/756400.aspx有Platform Verification Task
的具体描述
参照上文的说明,修改文件
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.Common.targets
中
<Target
Name="PlatformVerificationTask" Condition="'$(SkipPlatformVerification)' == 'true'" >
<PlatformVerificationTask
PlatformFamilyName="$(PlatformFamilyName)"
PlatformID="$(PlatformID)"
SourceAssembly="@(IntermediateAssembly)"
ReferencePath="@(ReferencePath)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
PlatformVersion="$(TargetFrameworkVersion)"/>
</Target>
部分,红色文字为新增加的部分
于是项目生成速度大幅提高。
2008年2月29日
【原文地址】First
Look at Silverlight 2
【原文发表日期】 Friday, February 22, 2008 6:41 AM
去年9月,我们发布了面向Mac和Windows的Silverlight
1.0,还宣布了在Linux上提供Silverlight的计划。Silverlight
1.0着重于促进浏览器中的丰富媒体场景,支持JavaScript/AJAX编程模型。
我们不久将发布 Silverlight 2
的第一个公开beta,这是个Silverlight的重大更新,将注重于促进富网络应用(RIA)的开发。本贴是我将在以后的几个月内撰写的详细讨论相关细节的几个贴子的第一篇。
跨平台/跨浏览器的 .NET 开发
Silverlight 2 包含了.NET 框架的一个跨平台,跨浏览器版本,促成了在浏览器中运行的一个丰富的 .NET 开发平台。开发人员可以使用任何一门
.NET 语言(包括VB, C#, JavaScript, IronPython 和 IronRuby)来编写 Silverlight
应用。我们将推出Visual Studio 2008 和 Expression Studio的工具支持,来促成建造 Silverlight
方案时开发人员与美工设计师间良好的工作流和集成。
这个即将发布的Silverlight 2 Beta1 版本提供了能促成精妙的RIA应用开发的一套丰富的功能集。这些功能包括:
- WPF UI框架: Silverlight
2包括了一个基于WPF的富用户界面框架,该框架将极大地方便建造丰富的Web应用。其中包括强大的图像和动画引擎,以及对像控件,布局管理,数据绑定,样式和模板皮肤这样高级的UI功能的丰富支持。
Silverligh中的WPF UI框架是与完整的 .NET 框架中的WPF
UI框架特性相兼容的一个子集,允许开发人员重用技能,控件,代码和内容来同时建造丰富的跨浏览器的web应用,以及丰富的桌面Windows应用。
- 丰富的控件: Silverlight
2包括了一套丰富的内置控件,可为开发人员和美工设计师用来快速地建造应用。这个即将发布的Beta1版本将包括核心的表单控件(TextBox, CheckBox,
RadioButton等),内置的布局管理面板(StackPanel, Grid, Panel等),常见的功能性控件(Slider, ScrollViewer,
Calendar, DatePicker等),以及数据操作控件(DataGrid,
ListBox等)。内置的控件支持一个丰富的控件模板模型,允许开发人员和美工设计师在一起合作建造精美的解决方案。
-
丰富的Networking支持: Silverlight 2 包含丰富的networking支持。它包括现成调用REST,
WS*/SOAP, POX, RSS, 和标准 HTTP服务的支持。它还支持跨域网络访问(允许Silverlight
客户端直接访问网上的资源和数据)。Beta1版本还包含了内置的sockets networking 支持。
- 丰富的基础类库: Silverlight 2
包含了一个丰富的.NET基础功能类库(集合,IO,泛型,线程,全球化,XML,本地储存等)。它包含了允许HTML DOM/JavaScript 与 .NET
代码集成的丰富的API。它还包含了 LINQ 和 LINQ to XML支持(允许对数据的轻松转换和查询),以及本地数据缓存和储存的支持。Silverlight
中的.NET API是完整的 .NET框架的一个兼容子集。
Silverlight 2 不要求.NET框架安装在计算机上就能运行。Silverlight 安装下载包括了在原装的Mac OSX 或
Windows机器上允许上述所有功能(还有我们不久将讨论的更多的功能)所需的一切。
Silverlight 2 Beta1 版本的大小为4.3MB,在没有安装的机器上大概要花4-10秒钟安装。Silverlight
2安装完毕后,你就可以在你喜欢的浏览器(IE, FireFox, Safari等等)里浏览 Web,自动运行丰富的Silverlight应用。
http://blog.joycode.com/scottgu/
-----------------------------------------------
随着今天ScottGu发布
一系列Silverlight2.0的文章和教程,我们终于可以一窥这个全新的RIA平台。数个月以来,多少开发人员的辛勤工作,大家猜测,期盼的功能,终于有了结果,一个崭新的Web客户端平台即将登场。
从ScottGu透露出的各种细节来看,2.0比之1.1确实有了有了质的提高,提供了不逊于.net framework完整版的丰富功能:
1、更接近于WPF的UI系统,更强大的图片和动画引擎,丰富的控件,布局,数据绑定,主题的支持。
2、原生支持REST, WS*/SOAP, POX, RSS,beta1还支持sockets,最重要的是支持跨域,可以直接调用其他网站的Web服务了。
3、更多的基本类库,包括集合,IO,范型,多线程,本地化,XML,本地存储和LINQ to XML。
所有这些东西加在一起只有4.3MB,一点也不臃肿。
从ScottGu发布的教程中还能看出Silverlight开发的一些细节:
1、由于Silverlight是客户端技术,服务器可以是任意的,包括Apache+Linux,语言也不需要是ASP.NET;
2、除Page.xaml之外,模版还会生成一个app.xaml以包含全局使用的资源,比如笔刷,动画效果等和全局事件。
3、编译后生成的文件是.xap,是以zip编码压缩的程序集,以缩减文件大小;
4、在HTML中嵌入Silverlight控件可以不使用javascript而以object形式嵌入;
Windows Communication Foundation:支持面向服务的应用程序
无论是通过工作流还是其他方式开发,绝大多数应用程序都需要与其他应用程序进行通信。近几年来,应用程序间的通信技术发展迅速。在长达数十
年的不统一之后,主要供应商之间最终达成了一致的应用程序通信协议。根据 SOAP 这一全球 Web 服务协议,基于 J2EE、.NET
Framework 等不同技术平台开发的应用程序间的互操作性相比以前大为简化。它还会使面向服务的架构这一思想为更多的组织接受。
当然,现在的通信方式已经不少了。以 .NET Framework 2.0 为例,您可以选择以下几种通信方式:
•ASP.NET Web 服务,提供基于 SOAP 的交互通信。
•.NET Remoting,主要用于 .NET 应用程序之间的通信。
•Enterprise Services,支持可扩展的事务性应用程序。
•System.Messaging,通过 Microsoft Message Queuing (MSMQ) 支持队列消息。
•Web Services Enhancements (WSE),它是 ASP.NET Web 服务的扩展,支持 WS-Security 等新规范。
这些技术都有其自身的价值,在实际应用中也有着各自的地位。可是,既然问题是一样的,为什么要采用好几种不同的解决方案呢?为什么不根据交互服务来建立一个单一的应用程序通信基础?
这正是 Windows Communication Foundation (WCF) 的设计初衷。有了
WCF,开发人员不必再像从前一样,处理每一类通信都要使用到不同的应用程序编程接口技术 - WCF (最初的代号为“Indigo”)以通用的
API 提供通用的方法。在 .NET Framework 3.0 环境下,大多数使用上述技术之一的应用程序将会代而使用 WCF。
WCF 通过 SOAP 提供强大的交互通信支持,这是现代计算机设备的基本要素。它还支持多项 WS-* 规范,如
WS-Security、WS-ReliableMessaging 和 WS-AtomicTransaction。WCF 不需要
SOAP,但是可能会使用其他方法,包括优化二进制协议、MSMQ 队列消息 和基于 REST 的简单通信。WCF
同样采取明确的面向服务方法来进行通信。WCF
不会在对象间进行透明通信,而是为通信各方提供略微不同的抽象服务。其结果之一就是放开了分布式对象系统间某些紧密的耦合关系,使得交互出错减少,并且更
容易修改。
-------------------------------------------------
在Microsoft提出.NET战略以来,
先后推出了一系列产品和技术, 这些产品和技术为我们在.NET平台下建立企业级的分布式应用提供了很大的 便利。这些技术和产品包括:.NET
Remoting,XML WebSerivce,WSE(2.0,3.0),Enterprise Service, MSMQ ......
我们知道,和一个相对独立的应用不同,我们开发
一个分布式应用, 尤其是开发一个企业级的分布式应用, 我们需要考虑较多的东西。比如我们要考虑数据在不同的应用之间传递时采取什么样的机制,
这种数据传递是否是安全的,可靠的;如何在分布式的环境下进行异常处理;如何把分别在 不同应用中执行的操作纳入同一个事务……
对于我们上面提到的这些 问题,
这些都是开发分布式应用考虑的典型的问题。值得庆幸的是,Microsoft开发的分布式的产品能够部分的解决这些问题。.NET Remoting
为我们在.NET平台下提供了非常好的解决方案(我个人认为,.NET
Remoting是.NET平台下最为成熟的分布式技术。比如相较于另一个使用更为广泛的技术XML Web
Service,它具有一些自己独特的特性:可以使用不同的传输层协议进行通信——Http &
TCP;可以使用不同的消息编码方式——Bianry & Text (XML);可以寄宿到IIS和任何一种托管的应用下
——Console Application 、WinForm Application、 Windows
Service……;Server端可以通过双向通信回调(Callback)客户端的操作;……)XML Web
Service为使我们实现跨平台的系统能够集成显得如此简单。随着技术的不断发展,相关的技术规范(WS-*
Specification)不断完善, XML Web Service现在已经成为使用最为广泛的分布式技术了。XML
Web Service能够得到如此广泛的推广,这得得益于Microsoft先后两次推出的Web Service Enhancement
(WSE 2.0 、WSE 3.0)。如果没有WSE, 单纯的asmx下的如此的担保和不可靠。WSE为Web
Service解决了几大难题:Security、Reliable Messaging、transaction
Handling以及大数据的有效传输。 MSMQ作为一种简单而有效的机制为不同应用之间数据的传递提供了保障。
其实,通过合理利用上面这些分布式的技术完全可
以为我们建立的一套适合不同层次需要的分布式构架。但这里面仍然存在一些问题,那就是上面这些技术和产品只能解决某一方面的问题; 比如.NET
Remoting虽然在.NET平台下是一个很好的依靠, 但是考虑到他不能提供不同平台之间的互操作性。另外,这些技术适合用了完全不同的编程方式,使
得我们很难从容地从其中一种转移到另一种上来。基于这些原因, 我们需要一套全新的技术整合以上都这些技术, 于是我们有了今天的WCF——
Windows Communication
Foundation。WCF建立一套框架,是我们通过一致的编程模式,使用不同的技术构建我们的分布式应用。
虽然很早开始接触WCF,但所学的总是零零碎碎。现在开始系统地研究WCF,希望与大家一同分享我的一些所得, 同时希望能通过这样的一个机会与大家一些探讨WCF,不对的地方希望大家指正。
2008年2月22日
手机开发主要平台:
1、Window Mobile 5,6,使用.NET Compact Framework2.0 比较方便;
使用vs 2008开发和桌面程序开发差不多。
2、J2ME平台,Window Mobile以外的平台,以j2me开发比较方便,适用范围比较广。
使用j2me调用.net Web服务。
web服务返回类时,生成代理时,在可以自动生成一个类。
返回byte[]调用失败,因为.net返回的byte[]数据,是BASE64的方式编码的,所以
直接让web服务把byte[]转化位base64字符串,然后在价j2me客户端解码base64字符串。
这样可以实现在客户端显示服务器端生成的统计图等图片。
返回string[][]调用失败
返回XML用jsr-172解析,可以实现返回.NET的DataSet。web服务通过DataSet.GetXml()把
DataSet转化为xml的字符串,客户端再用sax的方式解析xml。
返回的xml解析后,可以以tableItem的方式显示,界面不是很好看,比较简单。
tableItem只能显示string[][]模式的值,不能动态增加,需要首先构造好string[][]的数据
然后绑定到界面
在仿真器上可以正常调用web服务,因为刚开始时使用的是本地的web服务,代理生成的默认
url是localhost,虽然修改了wsclient生产代理处的服务器地址,但是生产的代理类里面还是
localhost,所以在手机上访问不了,提示IOException - 34的异常。后来直接修改代理类文
件中的服务器地址,手机就可以正常访问web服务了。
2005年1月12日
在web页面上,用window.open(...)打开一个新的浏览器(IE)窗口,这两个窗口是一个在Session里的;
但是如果使用的是微软的Web Browser控件,相同的页面打开新的页面时,则不在一个Session里。
搞了半天,发现如果用
window.showModelessDialog(...),而不使用open则可以在一个Session里。
2004年12月17日
在asp.net中,以代字号 (~) 开头的 URL(例如 ~/ErrorPage.htm)表示指定的 URL 是相对于应用程序的根路径。
2004年10月20日
摘要: 在ASP.NET先对DataGrid分页,主要有两类方法1)每次分页都重新从数据库提取一下数据,然后绑定数据优点:每次返回的数据较少。缺点:访问数据库的次数太多,而且select语句需要特殊处理,比如用top关键字等(SQL Server)2)把数据保存在session中然后每次分页时从Session绑定到DataGrid优点:编程简单,数据库访问次数少缺点:速度较慢,数据量大时占用内存太厉害感觉...
阅读全文
摘要: 1)对于值类型的变量,Session中保存的是值类型的拷贝Session["__test0"]=1;inti=(int)Session["__test0"]+1;intj=(int)Session["__test0"];结果i=2,j=12)对于引用类新的变量,Session中保存的是引用CDACommoncda=newCDACommon();Session["__test"]=cda.GetDa...
阅读全文
2004年8月23日
摘要: 1、控件是否在设计模式 bool IsDesignMode = (Site != null) ? Site.DesignMode : false;2、复制DataSet结构的简单方法 DataSet dsNew = dsOld.Clone();
阅读全文
2004年8月21日
摘要: 以前对在dos、window下写批处理不太熟练,现在用jscript或者vbscript写一些脚本,比如简单的安装之类,然后用jscript执行挺方便的。javascript的功能也是蛮强大的,学起来也很简单,感觉不错。
阅读全文