第三周的NuGet 软件包介绍 – 适用于 Windows Phone 7的PhoneyTools

image[原文发表地址] 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的应用程序创建更容易。

image

我会打开带有Windows Phone Tools的Visual Studio,这些Windows Phone Tools是从https://create.msdn.com.下载的。(想看我的Visual Studio是多么的干净?你的也可以同样整齐。)

My Totally Nothing Windows Phone 7 App

你可以看到我建了一个很基本的几乎什么都不做的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 你可以单击这里) 看会有什么反应。

NuGet Package Explorer - PhoneyTools.0.5 (11)

看起来他已经获得工程的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.dllMyAssembly.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 FadingMessage class

o SelectSwitch Control

o SimpleLongListSelector Control

* 其他类

o BitlyHelper class

o PhoneLogger class

o ObservableObject class

o Phone Resources classes

o Converters

o GameTimer class

o MicrophoneRecorder class

o SoundEffectPlayer class

                         PhoneNetworking class

总之这是他针对Mix的第一个发布版本。该版本是beta测试版。这有一个简单实用的东西如自动消去“toast”字样的消息…

FadingMessage.Show("Doing something important...");

 

如你所期待的(你可以使他们成为任何样子的)…

image

像其他更复杂的控件如SelectSwitch:

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());

 

为你提供了一个很好的干净的结果,你可以点击类别标题快速跳转至另一类。
ItemTemplate

有更多的,请记住我们发现Windows Phone版的Silverlight Toolkit “SliverlightToolkitWP”也是一个NuGet包?在Tim Heuer的blog上有很多关于这个Toolkit的信息也包含很多有用的控件和类。掌握了Phoney和Silverlight工具包我认为我可以去写我的应用程序了。

请继续坚持使用NuGet软件包去获得有用的东西。请全力说服你工作的团队,使他们相信这是一个有用的工具。
与此同时,请加入我们在亚特兰大举办的TechEd 2011大会,我将演示 DEV338 NuGet: 针对企业的Microsoft .NET 包管理 !

我很高兴看到大家使用NuGet,而不仅仅只使用Web应用程序。我希望你们也去使用它,亲爱的读者。