RSS 2.0 Feed
2005-03 Entries
摘要:以前相关:2005年3月版的Avalon和Indigo CTP已经发布使用XamlPad 即便您还不是MSDN的订户,也可以下载2005年3月版的Avalon和Indigo CTP了。就在http://www.microsoft.com/downloads/details.aspx?FamilyId=85AB132B-F1AA-4422-B053-272D79863013&displaylang=en 文件较大,也是测试下载速度的一次机会。...[阅读全文]

posted @ | Feedback (23) | Filed Under [ WPF/SilverLight ]

摘要: 不到一年之前,当“Google将提供1G的免费电子邮箱及邮件搜索服务”时,有些人决定要保持观望(“这么大的容量邮箱使用起来真的有意义吗?”),有些人表示震惊(“差点害我坐到地上去.......”),更多的人就是不相信(“Happy April Fools Day!”)。   不是我不明白,是世界变化快。   今天,当我们听到Yahoo也要提供1G的免费电子邮箱的报道时,还有很多人不相信或者震惊的么?其实在国内,Yahoo Mail的很多用户现在就已经有1G空间了。   (今天还看到博客堂宣言了,说得不错,开心就好)...[阅读全文]

posted @ | Feedback (1697) | Filed Under [ IT ]

摘要:当你安装好March CTP对应的WinFx SDK之后,通过Microsoft WinFx SDK à Tools à XamlPad就可以启动一个简单的Xaml编辑器,叫做XamlPad。以下是关于XamlPad的常见问题的总结回答: XamlPad适合学习和编写Xaml的主要原因在于其同时显示了Xaml文本及其解释后的效果。这在单一的Xaml文件不再可以通过IE显示的情形下尤其有用。 对错误的Xaml会显示错误信息,但是“Jump to”错误所在行列的功能并没有实现(其显示的信息是有效的)。 启动XamlPad的更好的一个方式是通过在Microsoft WinFx SDK àRelease Build Environment的Command Prompt中敲入xamlpad。 按F5可以新起一个Window来显示Xaml的内容。大多数Xaml的例子无需在新的Window中显示。但是如果根元素为Window,则需要使用F5。 使用命令XamlPad myDemo.xaml可以使XamlPad在启动时读入指定的文件。 若未指定文件或者指定文件并不存在,在当前目录下名为xamlpad_saved.xaml的文件会被XamlPad启动时自动读入。若其中含有错误使得XamlPad总是在启动时出错,可以用别的文本编辑器修改xamlpad_saved.xaml,或者将其删除。这个文件是XamlPad自动保存的。 XamlPad本身是一个Avalon Application,其核心API调用是System.Windows.Serialization.Parser.LoadXml. 准备在下一次发布时做的修改包括将其类型从Console Application改正为Windows Application,增加合适的Icon,实现Jump To功能等。不会加入的功能包括Intellisense,Visual Designer等。如果您有其他提高XamlPad有用价值的建议,欢迎发表评论。 贴子以"现状"提供且没有任何担保也没有授予任何权利...[阅读全文]

posted @ | Feedback (4) | Filed Under [ WPF/SilverLight ]

摘要:如果你是MSDN的订户,现在就可以在MSDN Subscriptions网页下载最新的WinFx社区技术预览(Community Technical Preview)版本了。根据上一次CTP的发布情况,非MSDN的订户也会在不久可以下载这一版本。   WinFX的SDK也已经做了相应更新。   与去年11月的CTP做比较,您会发现Avalon经历了大量变化。相关的反馈和问题,可以在新闻组或者通过此blog提出。   贴子以"现状"提供且没有任何担保也没有授予任何权利...[阅读全文]

posted @ | Feedback (7) | Filed Under [ WPF/SilverLight ]

摘要:在2年前的Tech Ed China上就有过FxCop的介绍,当时译为“框架警察”。关于FxCop的介绍和若干规则示例,可以参考John Robbins所写的Bad Code? FxCop to the Rescue和Three Vital FXCop Rules文章。本系列将由浅入深的解释定制FxCop的常用方式和技巧。   在设计新类时要避免实现ICloneable的Blog中仅仅解释了其原因。对于Design Guideline的实施,可以经常得到FxCop的帮助。既然FxCop自带的规则还没有包括对这一设计指导的检查,让我们自己来写一个这样的规则。全部步骤如下。使用的是.NET框架1.1和VS2003和FxCop 1.312版本,注意FxCop规则编程现在并没有得到官方支持。如果以后版本API发生变化,我会对示例程序有选择的更新。 下载FxCop 1.312: http://www.gotdotnet.com/team/fxcop/ 选择FxCop for .NET 1.1. 安装FxCop 1.312, 其缺省安装在“%ProgramFiles%\Microsoft FxCop 1.312”文件夹下。注意其中包括的FxCopSdk.dll和Microsoft.Cci.DLL这2个程序集(assembly)。我们的规则项目需要引用它们。 启动FxCop, 留意到在Rules Tab下所有预先提供的Rules. 将设计新类时要避免实现ICloneable中提供的测试用例编译成为一个Class library起名为FxCopRuleTests。 通过菜单,工具栏或者Ctrl+Shift+A以增加Target,即这些Rule将检查的程序集。添加FxCopRuleTests。 通过菜单,工具栏或者F5开始分析。结果有7条violation messages,但是没有设计新类时要避免实现ICloneable相关的消息。我们现在就开始写这样的一个FxCop Rule. 使用VS2003创建新的Class Library项目起名CustomFxCopRules. 删除IDE创建的Class1.cs和AssemblyInfo.cs. 添加对FxCopSdk.dll和Microsoft.Cci.DLL的引用 增加一个类文件叫做AvoidICloneableImplementation.cs. 添加一个命名为RuleInfo.xml的XML文件,设置其Build Action为Embedded Resource. 使用如下的代码,实现这一简单的FxCop Rule,编译后通过菜单,工具栏或者Ctrl+R加入FxCop的Rule之中,再运行FxCop看到正确结果。(提示,可以uncheck所有FxCop自带规则以减少干扰。   这是RuleInfo.xml <?xml version="1.0" encoding="utf-8" ?> <Rules FriendlyName="Custom FxCop Rules">   <Rule TypeName="AvoidICloneableImplementation" Category="ZhanboBlog.Demo" CheckId="ZB001">     <Name>Avoid ICloneable Implementation</Name>     <Description>ICloneable could be used to return either deep copy or shallow copy, and is therefore not useful.</Description>     <Url>http://blog.joycode.com/zhanbos/archive/2005/03/13/45707.aspx</Url>     <Resolution>Type '{0}' Implements ICloneable, which should be avoided.</Resolution>     <Email />     <MessageLevel Certainty="99">Error</MessageLevel>     <FixCategories>Breaking</FixCategories>     <Owner />   </Rule> </Rules>   这是AvoidICloneableImplementation.cs using System; using Microsoft.Cci; using Microsoft.Tools.FxCop.Sdk; using Microsoft.Tools.FxCop.Sdk.Introspection;   namespace ZhanboBlog.Demo.CustomRules {   /// <summary>   /// Do not implement......[阅读全文]

posted @ | Feedback (18) | Filed Under [ 设计指导 | Design Guideline ]

摘要: ICloneable只定义了一个Clone的方法,既可以实现为深拷贝(deep copy)也可以实现为浅拷贝(shallow copy)。因为这种二意性,用户不能够依赖Icloneable得知Clone返回的对象是深拷贝还是浅拷贝。这是在设计ICloneable时的一个缺陷。有鉴于此,在设计新类的时候,要避免实现ICloneable。   以下是一个不正确的例子。     using System;   namespace ZhanboBlog.Demo.FxCopRuleTests {   public class TestAvoidICloneable : ICloneable   {     public TestAvoidICloneable()     {       secretBlob = System.DateTime.Now.ToShortTimeString();     }       public object Clone()     {       TestAvoidICloneable copy = new TestAvoidICloneable();       copy.secretBlob = this.SecretBlob;       return copy;     }       public string SecretBlob     {       get       {         return secretBlob;       }     }     private string secretBlob;   } }   贴子以"现状"提供且没有任何担保也没有授予任何权利...[阅读全文]

posted @ | Feedback (17) | Filed Under [ 设计指导 | Design Guideline ]