Windows 8.1 RTM/VS2013 已可在 MSDN/TechNet 订阅下载

Windows 8.1 RTM 已可在 MSDN/TechNet 订阅下载

  今天,微软宣布 MSDNTechNet 订阅用户已经可以下载 Windows 8.1 RTM 版,也有 Windows Server 2012 R2 RTM 版。同时,开发者也可以下载 Visual Studio 2013 RC 版。Windows 8.1 Enterprise RTM 版将于本月底提供给 MSDN 和 TechNet 订阅用户。

  Steve Guggenheimer 在博客中谈到,微软承认他们最初推迟到 10 月在所有渠道发布 Windows 8.1 RTM 的决定,对于开发者来说是一大挑战,如今他们已经听取并采取了行动。

  微软称这次 Windows 8.1 RTM 预发布的目的是供测试,开发者和 IT Pro 都已经可以准备 Windows 8.1 应用最终开发和系统部署,微软工程团队仍在继续完善和更新系统来为准备 Windows 8.1 的 10 月 18 日正式发布,北京时间 17 日晚 7 点开始通过 Windows Store 推送,Windows 8 用户可以免费更新。

  Windows 8.1 代号 Blue,将继续扩大微软 Windows 8 对设备形态和触控体验的愿景,改进 Windows 8 操作系统的功能和用户体验,包括开始按钮和启动至桌面、个性化、搜索、内置应用、新 IE 11、Windows Store 体验、云连接、企业管理和安全。(via Windows

Visual Studio 2013 RC 官方下载页面

http://www.microsoft.com/visualstudio/chs/2013-downloads

Visual Studio 2013 RC 新功能:

  ——XAML 编辑器

Visual Studio 2013 RC 发布多图抢先看

Visual Studio 2013 RC 发布多图抢先看

Visual Studio 2013 RC 发布多图抢先看

Visual Studio 2013 RC 发布多图抢先看

  ——Cloud Business App

Visual Studio 2013 RC 发布多图抢先看

Visual Studio 2013 RC 发布多图抢先看

  ——C++

Visual Studio 2013 RC 发布多图抢先看

  ——TypeScript

Visual Studio 2013 RC 发布多图抢先看

  ——CodeLens

Visual Studio 2013 RC 发布多图抢先看

  ——工作项图表

Visual Studio 2013 RC 发布多图抢先看

设置Access数据库的使用期限

1、新建一个 窗体1

2、在 窗体1 的设计视图中,点击 查看Visual Basic代码

3、输入以下代码:

Private Sub Form_Load()
    '在2013-08-28到期
    If Now > "2013-08-28" Then
        MsgBox "系统已经超过使用期限,请联系作者"
        '关闭数据库
        Application.CloseCurrentDatabase
    End If
End Sub

 

4、在 文件 - 选项 - 当前数据库 - 显示窗体中 选择 窗体1

PS:此方��只能防君子,不能防小人

微软发布Windows 8.1开发者指南

  目前,微软官方已正式宣布 Windows 8.1RTM,但该公司并没有向开发者们提前发布这一最新系统,这对于想要为最新的 Windows 8.1 开发或优化应用的开发者们来说可不是什么好消息,好在现在微软已经向开发者们提供了为优化应用为目的的开发指南及资源。

  微软在其官方博客中称:“你可以在 Windows 8.1 公开发布的那一天提交应用,不过你现在已经可以利用 Visual Studio 2013 预览版以及 Windows 8.1 预览版来开发,你可以参考 Windows 开发者中心,并在那里下载必要的软件资源。”

  Windows 8.1 预览版中已经集成了开发者工具,例如 Visual Studio 2013,开发者可以使用与之相同的资源来为最终版的 Windows 8.1 开发应用。此外,如果 iOS 及 Android 软件开发者们也有意为 Window 8.1 开发应用,微软也会向其提供相应的参考资源。

  对于新手,微软还提供了入门级开发工具,并计划在 Windows 8.1 和 Visual Studio 在 10 月 18 日正式面世时在其官方博客以及 Windows Dev Center 中提供更多的指导以便开发者们对 Windows 8.1 的应用进行优化。

  微软表示,Windows 8.1 根据用户反馈进行了大幅度的改善,例如开始按钮的回归,从桌面直接启动,可禁用的 hot corner 以及其核心应用的改进,包括 Xbox Music、Bing Weather 以及 Bing News。

用有道翻译将BlogEngine的博客文章标题转换为英文

#region using

using System;
using System.Web;
using System.Web.UI;
using BlogEngine.Core.Web.Controls;
using BlogEngine.Core;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Net;
using LSW.Api.YouDao;

#endregion

/// <summary>
/// Transliterate post Chinese slug into English
/// </summary>
[Extension("使用 有道 Api 将标题自动翻译并转换为英文别名", "1.0", "<a href=\"http://blog.lishewen.com\">算神</a>")]
public class YouDaoSlugTransliterator
{
    /// <summary>
    /// Hooks up an event handler to the Post.Serving event.
    /// </summary>
    static YouDaoSlugTransliterator()
    {
        Post.Saving += new EventHandler<SavedEventArgs>(Post_Saving);
    }

    /// <summary>
    /// Handles the Post.Saving event.
    /// </summary>
    private static void Post_Saving(object sender, SavedEventArgs e)
    {
        Post post = (Post)sender;
        if (post.New)
        {
            try
            {
                Translation t = new Translation();
                string translatedText = t.Translate(post.Title);

                //if (responseStatus == "200")
                //{
                    string slug = Utils.RemoveIllegalCharacters(translatedText);
                    if (slug.Length > 30)
                        slug.Substring(0, 30);

                    post.Slug = slug.ToLower();
                //}
            }
            catch
            {
                // We maybe need to catch some exception
            }
        }
    }
}

给C#开发者的代码审查清单

这是为C#开发者准备的通用性代码审查清单,可以当做开发过程中的参考。这是为了确保在编码过程中,大部分通用编码指导原则都能注意到。对于新手和缺乏经验(0到3年工作经验)的开发者,参考这份清单编码会很帮助。

清单

1. 确保没有任何警告(warnings)。

2.如果先执行Code Analysis(启用所有Microsoft Rules)再消除所有警告就更好了。

3. 去掉所有没有用到的usings。编码过程中去掉多余代码是个好习惯。(参考:msdn

4. 在合理的地方检查对象是否为’null’,避免运行的时候出现Null Reference Exception

5. 始终遵循命名规范。一般而言变量参数使用驼峰命名法,方法名和类名使用Pascal命名法。(参考:msdn

6. 请确保你了解SOLID原则。

根据维基百科定义:在程序设计领域,SOLID (单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分。参考:wiki/SOLID_(面向对象设计)

7. 代码可重用性:如果一块代码已经被使用超过一次,或者你希望将来使用它,请提取成一个方法。将重复的工作做成通用的方法放在相关的类中,这样一旦你完成别人就可以使用了。将常用功能开发成用户控件,这样可以跨项目重用它们。(参考:

8. 代码一致性:比方说,Int32写成int,String写成string,应该在代码里保持统一形式。不能一会二写成int一会儿写成Int32。

9. 代码可读性:代码应该是可维护的,便于其他开发者理解。(参考:msdn

10. 释放非托管资源,比如文件I/O,网络资源等。一旦使用结束就应该释放它们。如果你想一旦超出使用范围就自动释放对象,可以使用usings将非托管代码括起来。参考:msdn

11. 合理实现异常处理(try/catch和finally块)和异常记录。参考:msdn

12. 确保代码中方法的行数不要过多,不超过30到40行。

13. 及时用代码管理工具check-in/check-out代码。(比如TFS) 参考:codeproject.com

14. 相互审查代码:和你的同事交换代码,实现内部审查。

15. 单元测试:编写开发测试用例完成单元测试,确保代码被送到QA以前,基本测试完成。参考:msdn

16. 尽量避免for/foreach循环嵌套和if条件嵌套。

17. 如果代码只会使用一次,请使用匿名类型。参考:msdn

18. 尽量使用LINQ查询和Lambda表达式,增加可读性。参考:msdn

19. 合理使用var、object和dynamic关键字。由于很多开发者会感到困惑或者知道的很少,会觉得它们有些相似,故而交换使用,这是要避免的。参考:blogs.msdn

20. 使用访问限定符(private, public, protected, internal, protected internal)限定每个方法、类或变量的需要范围。比方说如果一个类只会在程序集内使用,那么定义成internal就足够了。参考:msdn

21. 在需要保持解耦的地方使用接口,有些设计模式的出现也是由于接口的使用。参考:msdn

22. 按照用法和需要将类定义为sealed、static或abstract。参考:msdn

23. 如果需要多次串联,请使用Stringbuilder代替string,这可以节省堆内存。

24. 检查是否有不可能执行的代码,如果有,请修改。

25. 在每个方法前注释,说明它的用法、输入类型和返回值类型信息。

26. 使用类似Silverlight Spy的工具,检查和操控Silverlight应用在运行时对XMAL的渲染,以此来改善效率。这可以在设计执行XAML时,节省大量退回和来回修改的时间。

27. 使用filddler工具通过检查HTTP/网络流量和带宽,来跟踪web应用和服务的性能。

28. 如果你想确认Visual Studio以外的方法,请使用WCFTestClient.exe工具,或者装载它的进程到Visual Studio来进行调试。

29. 在任何合理的地方使用constants和readonly。参考:/msdnmsdn

30. 尽量避免强制转换和类型转换,因为会造成性能损失。参考:msdn

31. 对于你想提供自定义信息的类,请重载ToString(来自Object类)。参考:msdn

32. 避免直接从其他代码中ctrl+c/ctrl+v。一直建议还是自己用手敲,即使你已经找到相关代码。这样可以锻炼自己写代码能力,还能正确理解那段代码的用法。最终你永远都不会忘记那段代码。

33. 保持阅读书籍和文章的良好习惯,遵循大神们的实践指导。(比如微软专家和一些著名的专家,Martin Fowler, Kent Beck, Jeffrey Ritcher, Ward Cunningham, Scott Hanselman, Scott Guthrie, Donald E Knuth.)

34. 确认代码是否有内存泄漏。如果有,请确保已修正。参考:blogs.msdn.com

35. 尽可能参加专家们组织的技术研讨会,可以接触到最新的软件趋势、技术和最佳实践

36. 要透彻理解OOP概念,并尽可能在代码里实现。

37. 知道项目设计架构,可以从整体上理解程序的执行流程。

38. 采取必要措施阻止避免任何交叉脚本攻击、SQL注入和其他安全漏洞。

39. 永远记得将保密和敏感信息加密(通过使用好的加密算法),比如保存到数据库的密码和保存在web.config文件中的连接字符,要避免被非认证的用户操纵。

40. 避免对已知类型(原始类型)使用默认关键字,比如int, decimal, bool等。多数情况下,如果不确定是值类型还是引用类型,就使用泛型类型(T)。参考:msdn

41. 微软(在代码分析条例和指导中)并不推荐使用’out’和’ref’,这些关键字是通过引用传参,请注意,’ref’参数在传入被调用方法之前,应当在调用方法中先初始化,但’out’参数就不是这样。参考:msdn

Excel奇偶页打印宏

右击工作表标签—查看代码—插入—模块—粘贴代码—关闭VBE编辑器,回到工作表,工具—宏—宏,选择Print_双面,单击执行。

Sub Print_双面()

Dim pageTotal As Integer
Dim jPage As Integer
Dim OK

pageTotal = Application.ExecuteExcel4Macro("get.document(50)")

For jPage = pageTotal - IIf(pageTotal Mod 2 = 0, 1, 0) To 1 Step -2
ActiveSheet.PrintOut from:=jPage, To:=jPage
Next

OK = MsgBox("请把纸张装入打印机,打印偶数页", vbOKCancel, "双面打印")

If OK = vbOK Then
For jPage = 2 To pageTotal Step 2
ActiveSheet.PrintOut from:=jPage, To:=jPage
Next
End If

End Sub

.NET程序在windows操作系统上独立运行的技术要点

最让.NET程序员苦恼的是,辛辛苦苦写出来的.NET程序,需要客户机上安装了.NET才能运行。仅为一个小小的应用程序去下载上百兆的.NET安装包,还得把它老老实实安装到客户机上,并占掉数百兆磁盘空间,这无疑是一件得不偿失的事情。.NET程序的这个弱点,也是影响.NET应用程序普及和价值的一个重要因素。
所谓“独立运行”,是指.NET应用程序脱离完整的.NET运行环境,像c语言编译的程序那样,在操作系统上直接运行。简单地说就是:客户电脑无需安装任何版本的.NET框架,你的.NET程序照样可以在他的电脑或服务器上运行。
.NET程序独立运行的基础是mono运行时以及它的程序集。mono是什么呢,mono是一款开源、免费、可定制的跨平台.NET运行环境,同时,它还包含了一系列具有重要意义的实用工具,当前最新的版本号是3.0.10,本文所采用的mono,即是这个版本号的windows版。

那么,到底怎么才能让你的.NET程序无障碍地在没有安装.NET平台的客户机“独立运行”呢,下面直奔主题。

一,建立跨平台的.NET环境与编译环境:
1、下载并安装mono的windows版,建议将它安装到c:\mono文件夹中。
2、安装cygwin。
A、建议将它安装到c:\cygwin文件夹中。
B、安装时,请将mingw-gcc、mingw-zlib、pkg-config、libiconv这几个组件选上,这是将.NET程序转化为本地程序的必要的编译环境。

二,启动cgywin并设置环境变量:
1、点击开始菜单或桌面上的cygwin图标,启动且进入cygwin环境。
2、输入下面的命令,设置或修改必要的环境变量:
export PKG_CONFIG_PATH=/cygdrive/c/mono/lib/pkgconfig
export PATH=$PATH:/cygdrive/c/mono/bin

三,将你的.NET程序转化为“独立程序”

请注意,这是本文的关键所在,很多地方的操作都有别于其它网文和mono官网所介绍的操作技术。

1,复制文件。把需编译的.NET EXE文件和对应的DLL文件复制到你在cygwin的工作文件夹中,如果你的windows用户名是xyz,那么这个文件夹就是 c:\cygwin\home\xyz\,(这一步不是必须的,如果你不怕麻烦而愿意多打字的话)。

2,转换与打包。通过下面的命令,将.net程序和类库打包并得到一个c程序源码(假设你需要转换的.NET文件是a.exe)。
mkbundle -c -o b.c -oo b.o a.exe -z
或者:
mkbundle -c -o b.c -oo b.o a.exe aa.dll c:\\mono\\lib\\mono\\4.5\\mscorlib.dll -z
或者:
mkbundle -c -o b.c -oo b.o --dept a.exe -z

3,修改得到的c文件:
这是本文的精华所在。
为什么要修改这个c文件,很简单:
A,不希望与exe文件相关的类库全部打包到一个文件中,否则,太浪费,而且影响启动速度。
B,这个c文件是目标程序的关键文件,我希望在中间加上自己的东西,让我的程序如虎添翼。
C,我程序要在中文、日文这样的含有非英文字母的文件夹中运行。

3.1,需要添加和修改的内容:
A,用VS或记事本打开b.c,把下面的代码复制到main函数之前,作一个准备。

#include <dir.h>
#include "/usr/include/iconv.h"
int gbk_utf8(char *inbuf,int inlen,char *outbuf,int outlen){
iconv_t cd;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open("utf-8","gbk");
if (cd == 0) return -1;
memset(outbuf, 0, outlen);
if (iconv(cd, pin, &inlen, pout, &outlen) == -1) return -1;
iconv_close(cd);
return 0;
    }

 

B、在main函数中,找到下面这两行并注释或删除掉:

if (config_dir != NULL && getenv ("MONO_CFG_DIR") == NULL)
mono_set_dirs (getenv ("MONO_PATH"), config_dir);

 

C、接着,就在这行下边,即“mono_mkbundle_init”一行之前,输入下边的代码:

const char* lib = "\\lib";
const char* etc = "\\etc";

char p[strlen(argv[0])];
wsprintf(p,"%s",argv[0]);

int l = 0;
l = strlen(p);
for(i=l-1; i>0; i--){
 if(p[i] == '\\'){
 p[i] = '\0';
 break;
        }
    }

 l = strlen(p) + strlen(lib);
 char s_lib[l];
 wsprintf(s_lib, "%s%s", p, lib);

 l = strlen(s_lib);
 char* s_lib_utf8 = (char*)malloc(l*2);
 memset(s_lib_utf8, 0, l*2);
 gbk_utf8(s_lib, l, s_lib_utf8, l*2);

 l = strlen(p) + strlen(etc);
 char s_etc[l];
 wsprintf(s_etc, "%s%s", p, etc);

 l = strlen(s_etc);
 char* s_etc_utf8 = (char*)malloc(l*2);
 memset(s_etc_utf8, 0, l*2);
 gbk_utf8(s_etc, l, s_etc_utf8, l*2);

 mono_set_dirs(s_lib_utf8, s_etc_utf8);

 

接着在mono_mkbundle_init一行之后加入一行:

chdir("c:\\");

 

最后,找到下面三行

#ifdef _WIN32
 #include <windows.h>
 #endif

 

并在“#endif”后加入一行:

 #undef _WIN32

 

改完了,存盘退出。
(有人会说“输入这么多,为什么不写个函数以方便我将来复用?”,我说,这不是我的事。)

3.2,编译:
用下面这个命令生成你的目标文件“b.exe”。
gcc -mno-cygwin -o b.exe -Wall b.c `pkg-config --cflags --libs mono-2|dos2unix` b.o -lz -liconv

四,程序、类库、配置文件的组织:
这一步,是为你的程序安一个家,让它真的能跑起来。

1,在某个盘,比如D盘,建个文件夹,比如是“myapp”
把刚才编译得到的目标文件b.exe复制到D:\myapp文件夹中。
同时把c:\mono\bin\文件夹中的mono-2.0.dll、zlib1.dll、iconv.dll复制到d:\myapp中。

2,组织类库
在“d:\myapp”文件夹中,建lib和etc两个子目录。
在lib文件夹中,建名叫“mono”的文件夹。
在d:\myapp\lib\mono文件夹中,根据你.NET程序集版本号建一个文件夹,名字就是版本号,比如“4.5”,当然,你也可以把2.0、4.0也建好。
如果你没有将mscorlib.dll打包到.EXE中,请将c:\mono\lib\mono\4.5\mscorlib.dll,复制到 d:\myapp\lib\mono\4.5这个文件夹中。
在d:\myall\lib\mono文件夹中,建一个名为gac的文件夹,这个文件夹是用来放你的程序需要的mono版.NET类库的。
放些什么?放你的exe、dll文件中引用到的那些程序集的库文件(如果你已经把这些文件打包到了.exe中,那么你就不需要放任何文件)。
比如,你引用了System名字空间,那么,将c:\mono\lib\mono\gac文件夹下的System文件夹复制到D:\myapp\lib\mono\gac中就行了。

3,组织配置文件
把c:\mono\etc文件夹中的“mono”文件夹复制到d:\myapp\etc文件夹中。
用写字版打开config文件,找到并删除下列三行:

 <dllmap dll="gdiplus" target="/tmp/install/lib/libgdiplus.so" />
 <dllmap dll="gdiplus.dll" target="/tmp/install/lib/libgdiplus.so" />
 <dllmap dll="gtkhtml-3.0" target="libgtkhtml-3.8-15.dll"/>

 

通过上面的几个步骤,你的程序已经变成了可以独立运行的程序了,你把d:\myapp这个文件夹压缩打包,然后解压到没有安装.net的电脑上,试试。
可能有读者会说,对本文某些地方不太理解或者有异议,那么,我欢迎讨论。

补充:

关于中文字符集

mkbundle生成的程序,并没有GB2312等字符集信息,如果有GetEncoding("gb2312")这样的调用,肯定会出错。
解决办法:
1、把mono的I18N.dll、I18N.CJK.dll打包到目标程序中。
2、把mono的lib\mono\gac中的I18N、I18N.CJK文件夹,复制到你应用程序目录的lib\mono\gac中。

常见问题:

gcc有可能提示“cannot find -liconv”,解决这个问题的办法是:在gcc命令行中加入参数 “-LC:/cygwin/lib”,明确指定iconv库的搜索路径。

关于“独立exe”调用dll类库的技巧

exe调用的dll,有三个处理办法:
1、打包到exe中;
2、签名后,放到这个exe所在的文件夹下的lib/mono/gac子文件夹中;
3、直接放到这个exe所在文件夹的lib文件夹中。

VB6关闭屏幕保护功能

  此外希望只有本次使用 Windows 时改变(下次开机时还原原状), 则最後参数改为 SPIF_SENDWININICHANGE (没有SPIF_UPDATEINIFILE)

Const SPI_SETSCREENSAVEACTIVE = 17
Const SPI_SETSCREENSAVETIMEOUT = 15
Const SPIF_SENDWININICHANGE = &H2
Const SPIF_UPDATEINIFILE = &H1

Private Declare Function SystemParametersInfo Lib "user32" Alias _
  "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _
   ByVal lpvParam As Long, ByVal fuWinIni As Long) As Long

Private Sub SetScreenSaveTimeout(ByVal BySecond As Long)
 Call SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, BySecond, 0, _
     SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
End Sub

Private Sub EnableScreenSave()
 Call SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, 0, _
     SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
End Sub
Private Sub DisableScreenSave()
 Call SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, 0, _
     SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
End Sub 

如何判别一个.Net程序的目标平台

判别一个.Net程序的目标平台是x86/x64/AnyCpu中的哪个,可以使用以下方法:

1、在VS2010/12/13中的解决方案管��器中,右键你需要使用检测平台的项目

2、选择管理 Nuget 程序包

3、选择 联机 –> Nuget官方程序包源 –> 搜索 LSWFramework

4、点击安装,并等待安装完成

5、在代码中通过以下的代码调用即可

LSW.Common.Runtime.GetAssemblyDetails("D:\WindowsFormsApplication1.exe").CPUVersion.ToString

微软透露开发多款Bing Win8内置应用细节

早前,微软为Windows 8以及RT用户带来了多项软件更新,其中包括了新闻、天气、金融、体育、旅游以及地图等多个软件。今天,微软又为用户带来了他们是如何开发这些软件的更多信息。据Windows 8软件开发者官方博客透露,Bing开发团队是在一年之前创建的。所有由这支团队开发的Bing内置软件软件都是基于HTML/Java Script,除了地图软件之外,其采用的是XAML/C#。

Find the weather conditions for your places of interest.

另外,所有的软件还都采用了客户端缓存技术。
微软表示之所以开发出这么多内置应用的部分原因则是为了给Win8第三方软件开发商提供模板,比如所有的Bing内部应用都支持快速视图、顶部导航栏、底部命令控制栏等模式。
如果想要更加详细地了解微软是如何设计以及如何创建出这些软件的话,可以去官方博客进行了解。