第三周的NuGet 软件包介绍 – 适用于 Windows Phone 7的PhoneyTools
[原文发表地址] NuGet Package of the Week #3 - PhoneyTools for Windows Phone 7
[原文发表时间] 2011-03-21 11:17 AM
您实施了NuGet行动计划吗?行动起来吧,它只需5分钟: NuGet行动计划——升级到1.1版本,安装自动更新,获取NuGet 软件包浏览器。
故事背景:我正在思考既然NuGet.Net软件包管理网站开始逐渐充实,那么我应该开始在那寻找宝石了(没有双关含义)。您知道,就是那种大家可能没法发现的真正有用的东西。我将主要寻找开放源代码项目——我认为它们很有用。我会查看它们如何生成NuGet软件包,看看它们设计开箱体验(out of the box experience)时有没有什么有趣的地方(以及任何它们可以改进的举措),当然也会关注软件包本身所做的事。
PhoneyTools包括新的控件,类和Windows Phone 7的技术
我听说自从NuGet与ASP.Net MVC被捆绑在一起以来,一些人认为它只能用于web开发。这个weeks包是用于Wiondows Phone 7开发的。你可以把任何你想要的东西打包。似乎在NuGet的网站上的已经有 26个 库用 "phone"标记了
这些工具是由Shawn Wildermuth开发的,包含了很多有用的类和控件,它们可以使Windows Phone的应用程序创建更容易。
我会打开带有Windows Phone Tools的Visual Studio,这些Windows Phone Tools是从https://create.msdn.com.下载的。(想看我的Visual Studio是多么的干净?你的也可以同样整齐。)
你可以看到我建了一个很基本的几乎什么都不做的Windows Phone 7的应用程序,并且也能看到NuGet Package Manager Console停靠在了底部。
我输入:
PM> Install-Package PhoneyTools
'SilverlightToolkitWP (≥Y 4.2011.2.1)' not installed. Attempting to retrieve dependency from source...
Done.
Successfully installed 'SilverlightToolkitWP 4.2011.2.1'.
Successfully installed 'PhoneyTools 0.5'.
Successfully added 'SilverlightToolkitWP 4.2011.2.1' to WindowsPhoneApplication2.
Successfully added 'PhoneyTools 0.5' to WindowsPhoneApplication2.
看上去PhoneyTools把SilverlightToolkitWP作为依赖引用进来。如果你想查看一下,我可以双击NuPkg(它被关联到NuGet Package Explorer 你可以单击这里) 看会有什么反应。
看起来他已经获得工程的assembly和Tools 文件夹下的install.ps1和uninstall.ps1。里面有什么?
对assembly的引用会自动按照约定加载
当你安装和卸载的时候,install.ps1和uninstall.ps1会自动运行。他已经检查了在那的NuGet的版本(似乎那是从我所建的一个的包中复制粘贴的)并手动停止来添加引用。添加引用的多余行是不需要的 。 我认识Shawn因此我很肯定他对我用这些当做教程没什么意见,虽然这些知识并不能100%的展现这些新东西是怎样工作的。
param($installPath, $toolsPath, $package, $project)
if ($host.Version.Major -eq 1 -and $host.Version.Minor -lt 1)
{
"NOTICE: This package only works with NuGet 1.1 or above. Please update your NuGet install at https://nuget.codeplex.com. Sorry, but you're now in a weird state. Please 'uninstall-package PhoneyTools' now."
}
else
{
$project.Object.References.Add("AgiliTrain.PhoneyTools"); #don't need this
}
它直观上看起来要手动添加引用,但库文件中的assemblies会被当作引用自动添加和删除,仅仅因为它们在库文件夹中! 所以没有必要手动去做。
事实上,你可以创建一个包,它包含很多的不同框架版本的assemblies版本。参考支持多种 .NET Framework版本和配置文件上的NuGet文档 :
\lib
\MyAssembly.dll
\MyAssembly.Core.dll
\Net40
\MyAssembly.dll
在针对.NET Framework 2.0和 .NET Framework 3.5的项目中 ,NuGet复制了 MyAssembly.dll 和 MyAssembly.Core.dll.但在针对和 .NET Framework 4.0的 项目中 ,只从Net40文件夹中复制MyAssembly.dll 。 如果你想在.NET Framework 4的项目中安装 MyAssembly.Core.dll,你必须将它包含在 Net40文件夹中。
对Sliverlight,他应该这样做:
lib
\sl4
\AgiliTrain.PhoneyTools.dll
在NuGet1.2版本时,他可以使用\sl4-wp。那样的话人们可以发布一个包,包含用于Sliverlight 4和基于Windows Phone 7的Sliverlight的不同的装载。
使用PhoneyTools
既然我已安装PhoneyTools,那么我能做什么操作?依照PhoneyTools CodePlex 项目,这是一个包含若干适用于Windows Phone7应用程序的类和控件的项目。有以下计划:
控件
o SimpleLongListSelector Control
其他类
总之这是他针对Mix的第一个发布版本。该版本是beta测试版。这有一个简单实用的东西如自动消去“toast”字样的消息…
FadingMessage.Show("Doing something important...");
如你所期待的(你可以使他们成为任何样子的)…
像其他更复杂的控件如SelectSwitch:
还有SimpleLongListSelector 控件,它能为你处理很多令人厌烦的工作并使通过目录(categories)创建一个大且长的列表变得简单,如如下的XAML:
<my:SimpleLongListSelector x:Name="longList">
<my:SimpleLongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageUrl}"
Height="75" />
<TextBlock Style="{StaticResource PhoneTextNormalStyle}"
Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</my:SimpleLongListSelector.ItemTemplate>
</my:SimpleLongListSelector>
随着这种针对数据源的LINQ查询:
// For Complex Object and ItemTemplate
var qry = from g in games
orderby g.Genre, g.Name
group g by g.Genre into genre
select genre;
longList.SetGroupingItemsSource<Game>(qry.ToList());
为你提供了一个很好的干净的结果,你可以点击类别标题快速跳转至另一类。
有更多的,请记住我们发现Windows Phone版的Silverlight Toolkit “SliverlightToolkitWP”也是一个NuGet包?在Tim Heuer的blog上有很多关于这个Toolkit的信息也包含很多有用的控件和类。掌握了Phoney和Silverlight工具包我认为我可以去写我的应用程序了。
请继续坚持使用NuGet软件包去获得有用的东西。请全力说服你工作的团队,使他们相信这是一个有用的工具。
与此同时,请加入我们在亚特兰大举办的TechEd 2011大会,我将演示 DEV338 NuGet: 针对企业的Microsoft .NET 包管理 !
我很高兴看到大家使用NuGet,而不仅仅只使用Web应用程序。我希望你们也去使用它,亲爱的读者。