微软最近发布了Visual Studio Team Foundation Server 2012的Power Tools Update 1,提供了服务端的备份和恢复工具,以及64位支持。备份工具让你可以为配置数据库、每个团队项目集合的数据库,包括TFS所使用的SharePoint和SQL Server Reporting Services数据库提供定时备份功能。
恢复工具让你可以把整个部署环境的数据库恢复到一个新机器上。这个更新还包括了一些PowerShell接口,提供了版本控制命令的基本支持,进行脚本控制的管道和粘合剂。
Team Foundation Server的产品组经理Brian Harry说道:“我们几个月前发布了Team Members Power Tool的第一个版本,正如很多初始版本一样,我们收到了大量的反馈和问题报告。我们修复了所有严重的问题。”
这个升级包包括了最佳实践分析器工具,可以验证TFS是否按照推荐的最佳实践进行了配置。也可以识别问题的来源,捕获部署配置的快照来进行各方面的详细研究,比如:获取过去14天的数据存储或访问数据量,以便在数据库大小需要缩减的时候开发人员能够进行适当的操作。
TFS Power Tools包括了一个过程模板编辑器的用户界面,和一些故事板形状(storyboard shapes )让你可以为PowerPoint故事板功能添加形状。
团队资源管理器的增强部分包括如下地方:
- 通过状态和通配符在版本控制里查找文件
- 从源代码控制管理器的上下文菜单中用文件资源管理器打开文件夹
- 在源代码控制管理器中为文件和文件夹设置标签
而且,你还能轻易地克隆构建定义和复制工作项路径,以便在Visual Studio 2012中和他人协作和分享。
这个升级包也包括了一个命令行工具——tfpt.exe,它包含了额外的版本控制命令,工作项跟踪和团队项目操纵命令,如测试附件清除工具;以及用于Windows Shell和工作项模板的一组扩展。
David R.Brown提到:
这一系列的杰出工具帮助我们更顺畅地升级到TFS2012。利用TFPT命令为那些没有报表的现存团队项目添加报表易如反掌,它还会同时在WSS中 创建好团队站点!!谢谢开发团队!如果你使用Visual Studio 2012和TFS 2012的话,这些工具一定要使用,可以给你带来非常舒服的体验。
Aikka Young评论道:
在安装有VS旗舰版的Windows 8上无法安装,不过团队资源管理器还是可以用。
Crispin Wright回帖道:
安装的典型模式没有为初学者考虑,它提到数据备份计划选项需要安装到服务器,接着就不让你进行进一步操作了。接着我尝试自定义模式,Shell扩展又不能和其他扩展一同安装,我不得不再次关闭它。
Axomoxoa跟帖道:
确实,这是一个优秀的工具,加强了TFS的很多功能,不过奇怪的是居然没有人告诉我为什么好几个人都遇到过程编辑器无法显示的问题。
本文链接
前面一篇文章我们介绍了Asp.net MVC 3下异步操作。今天我们来看一下,同样功能在 Asp.net MVC 4 下的实现,基于.net framework 4.5 下的async支持,让我们的代码更加简单,看下面片断代码名叫Index的Action方法:
public async Task<ActionResult> IndexAsync() { var cnblogsTask = GetStringAsync("http://www.cnblogs.com"); var myblogTask = GetStringAsync("http://www.cnblogs.com/wintersun"); // Asynchronously wait for them all to complete. await Task.WhenAll(cnblogsTask, myblogTask); Operations translations = new Operations() { FirstOperation = cnblogsTask.Result, SecondOperation = myblogTask.Result }; return View(translations); }
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
private static async Task<string> GetStringAsync(string uri , CancellationToken cancelToken = default(CancellationToken)) { using (HttpClient httpClient = new HttpClient()) { var response = await httpClient.GetAsync(uri, cancelToken); return (await response.Content.ReadAsStringAsync()); } }
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
上面的代码我们实现多个Task并行异步,注意async与await关键字,在.NET 4.5 与 Visual Studio 2012下可用。你只可以使用await关键字同时标注了async的方法。使用异法的HttpClient来替代WebClient类,await关键字运用到HttpClient的异步方法上。使用Task.WhenAll等待所有任务结束。我们知道TPL中还提供了CancellationToken,MVC框架中也提供了AsyncTimeout特性,看面下面示例代码:
[AsyncTimeout(100)] [HandleError(ExceptionType = typeof(TimeoutException),View = "Error")] public async Task<ActionResult> IndexCancleAsync() { var cancellationToken = new CancellationToken(false); var cnblogsTask = GetStringAsync("http://www.cnblogs.com", cancellationToken); var myblogTask = GetStringAsync("http://www.cnblogs.com/wintersun", cancellationToken); await Task.WhenAll(cnblogsTask, myblogTask); Operations translations = new Operations() { FirstOperation = cnblogsTask.Result, SecondOperation = myblogTask.Result }; return View(translations); }
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
我们设置异步超时为100毫秒,并且我们可以传递CancellationToken的参数给具体的Task。 最后把结果返回给View,实际你可以自行Debug看其中过程。
希望对您Web开发有帮助。
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
本文链接
网上有很多关于SingleTon的用法说明及实现,大多都提供了很多种实现的方法,包括如何保证在多线程时也只提供一个实例。对于他的作用都是说只提供一个实例,但是到底有什么作用,对于我们这些初学者来说并不知道如何使用。经过自己的摸索,目前了解到了一些用法,不知道对不对,请高手们指点:
比如我们在程序中设置了一个主窗口:
public partial class DefaultWorkBench :From
{ public DefaultWorkBench()
{
InitializeComponent();
}
}
由于这个窗口我们只需要一个就行了,所以我们使用SingleTon模式。
public class WorkBenchSingleTon
{
private static DefaultWorkBench workBench=new DefaultWorkBench();
public static DefaultWorkBench WorkBench
{
get
{
if (workBench == null)
{
workBench = new DefaultWorkBench();
}
return workBench;
}
}
}
那么这有什么用呢?
我们在Main方法中:Application.Run(WorkBenchSingleTon.WorkBench)就相当于以前的Application.Run(new Form()),而如果我们还有其他的窗口或其他任何地方,需要调用到DefaultWorkBench窗口里面的函数或者控件,如果不使用这个模式,那么我们在另外的窗口的构造函数中需要传入DefaultWorkBench的实例,而现在我们只需要使用简单的:WorkBenchSingleTon.WorkBench.函数名或者属性或者控件就可以进行调用或设置了。特别是我们使用插件的方式进行开发的时候 ,其他的插件一般会和WorkBench进行通信,现在我们就可以在任何地方使用WorkBenchSingleTon.WorkBench来调用主窗口的一些控件的属性了。
在下一篇来介绍使用这种方式开发的插件框架。
本文链接