<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://www.codeplex.com/rss.xsl"?><rss version="2.0"><channel><title>Contacts Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/Wiki/View.aspx?ProjectName=Contacts&amp;title=Home</link><description>Contacts Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Home&amp;version=30</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Use Windows Contacts from C#&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Welcome!&lt;br /&gt; &lt;br /&gt;Contacts.Net is a managed API for working with the new .Contact format introduced with Microsoft Windows Vista.  This lets developers incorporate Windows Contacts into their applications using any .Net language, such as C#, VB.Net, C++/CLI, F#, etc., using a higher level and more strongly typed object model than what's exposed by the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms735866(VS.85).aspx" class="externalLink"&gt;COM IContact APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; published with the Windows Vista SDK.  Long term it is also intended to be a set of reusable widgets for displaying contact data in the context of larger programs, similar to what the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms629361.aspx" class="externalLink"&gt;WAB APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; offer.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Coding4Fun&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Wow!  Contacts.Net has been incorporated into the &lt;a href="http://codeplex.com/C4FDevKit" class="externalLink"&gt;Coding4Fun developer kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (also hosted on Codeplex) :)&lt;br /&gt;This is part of the Visual Studio Express release, and includes lots of useful utilities beyond contacts.  The folks at Clarity Consulting have added classes and services on top of the core library - source included - that make using contacts in your app as easy as dragging items from the toolbar into your app.  It even includes a sample address book built on top of it and a quick start guide describing how to create something similar.  Very cool stuff!  An overview of the entire kit is available at &lt;a href="http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx" class="externalLink"&gt;http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The version of Contacts used by C4F is based on Contacts.Net code close to the .8 release, so there's additional goodness in current releases that isn't in the dev kit.&lt;br /&gt; &lt;br /&gt;There are some articles online using the C4F dev kit:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/coding4fun/archive/2007/12/28/6893024.aspx" class="externalLink"&gt;This&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a sample that uses the Contacts component to copy your Facebook contacts to your bluetooth phone. (C#, VB.Net)&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/AVCardPreviewHandlerUsingTheCoding4FunDevKit.aspx" class="externalLink"&gt;Scott Hanselman&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; wrote a vCard preview handler using the dev kit.  Sadly it was without using the Contacts library, but he mentions it kindly at the end of the post. (C#)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Release&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release is called 1.0 and was released in August.  It's a fully functional API for working with Contacts.  It has all the capabilities of the Vista IContact COM APIs exposed so the property collections are strongly typed in addition to providing access via the property path approach of the native APIs.  It contains numerous bug fixes and performance improvements over previous releases of Contacts.Net.  This release accomplishes most of what I originally planned with this project, which is reflected in the version number.&lt;br /&gt; &lt;br /&gt;The UI originally intended to be part of this has been forked into another project, &lt;a href="http://codeplex.com/Conmigo" class="externalLink"&gt;Conmigo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  As such this is still intended to be a developer release.  The original loose UI is still present as an example of how the APIs can be used.&lt;br /&gt; &lt;br /&gt;Some features contained in Contacts.Net that are more than what is available in the native IContact APIs include&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Import and export from vCard format&lt;/li&gt;&lt;li&gt;Better group support, including the ability to work with two different types of groups: one is the .group format supported by WAB in Vista, the other is a format using the underlying XML schema that is consumable by clients directly accessing the XML.&lt;/li&gt;&lt;li&gt;The ability to work with contact collections not rooted in the user's Contacts folder.&lt;/li&gt;&lt;li&gt;User tile framing consistent with the Vista UI.&lt;/li&gt;&lt;li&gt;Per-property attribute information.&lt;/li&gt;&lt;li&gt;UI.  For a preview, check out the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Screenshots&amp;amp;referringTitle=Home"&gt;Screenshots&lt;/a&gt; page.&lt;/li&gt;&lt;li&gt;Works on XP.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There's also a secondary release called ContactsBridge (similar to the Vista SDK's VistaBridge).  It is purely a .Net wrapper on top of the native IContact APIs accessed via COM Interop.  As such bugs and inconsistencies in the Vista implementation are exposed by it.  It is a fork of an older version of the Contacts.Net library when more was being done via interop.  It's still hosted here for propsperity as an academic example of a large COM interop library (again, similar to VistaBridge) or for those who have a need for using wab32 in a more direct way.&lt;br /&gt; &lt;br /&gt;If you've been using previous versions of the library these are the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking%20Changes&amp;amp;referringTitle=Home"&gt;Breaking Changes&lt;/a&gt; you should be aware of between different versions.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class%20Diagrams&amp;amp;referringTitle=Home"&gt;Class Diagrams&lt;/a&gt; page describes the APIs at a high level.&lt;br /&gt;There is also a &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Home"&gt;Sample Code&lt;/a&gt; page with simple examples of the library in action.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms735779.aspx" class="externalLink"&gt;MSDN documentation&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; about the COM interfaces provided with the Windows SDK is also available.&lt;br /&gt; &lt;br /&gt;As part of developing this API, I've found some interesting behavior in the native implementation of the IContact APIs.  These notes might serve well for developers working with the native APIs.  They're archived in the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;amp;referringTitle=Home"&gt;Gotchas&lt;/a&gt; page.&lt;br /&gt; &lt;br /&gt;See other developer tools that are part of Microsoft's shared source initiative at&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx" class="externalLink"&gt;http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Mon, 02 Feb 2009 18:25:41 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090202062541P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Home&amp;version=29</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Use Windows Contacts from C#&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;First a note:&lt;br /&gt;Please post questions to the discussions tab.  That way I can get notifications when questions get asked, and it helps keep threads more organized for other people looking for similar answers.  I'll do my best to answer questions wherever they're posted, but I may not notice right away comments made on the wiki pages.&lt;br /&gt;Thanks!&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Welcome!&lt;br /&gt; &lt;br /&gt;Contacts.Net is a managed API for working with the new .Contact format introduced with Microsoft Windows Vista.  This lets developers incorporate Windows Contacts into their applications using any .Net language, such as C#, VB.Net, C++/CLI, F#, etc., using a higher level and more strongly typed object model than what's exposed by the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms735866(VS.85).aspx" class="externalLink"&gt;COM IContact APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; published with the Windows Vista SDK.  Long term it is also intended to be a set of reusable widgets for displaying contact data in the context of larger programs, similar to what the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms629361.aspx" class="externalLink"&gt;WAB APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; offer.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Coding4Fun&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Wow!  Contacts.Net has been incorporated into the &lt;a href="http://codeplex.com/C4FDevKit" class="externalLink"&gt;Coding4Fun developer kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (also hosted on Codeplex) :)&lt;br /&gt;This is part of the Visual Studio Express release, and includes lots of useful utilities beyond contacts.  The folks at Clarity Consulting have added classes and services on top of the core library - source included - that make using contacts in your app as easy as dragging items from the toolbar into your app.  It even includes a sample address book built on top of it and a quick start guide describing how to create something similar.  Very cool stuff!  An overview of the entire kit is available at &lt;a href="http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx" class="externalLink"&gt;http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The version of Contacts used by C4F is based on Contacts.Net code close to the .8 release, so there's additional goodness in current releases that isn't in the dev kit.&lt;br /&gt; &lt;br /&gt;There are some articles online using the C4F dev kit:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/coding4fun/archive/2007/12/28/6893024.aspx" class="externalLink"&gt;This&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a sample that uses the Contacts component to copy your Facebook contacts to your bluetooth phone. (C#, VB.Net)&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/AVCardPreviewHandlerUsingTheCoding4FunDevKit.aspx" class="externalLink"&gt;Scott Hanselman&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; wrote a vCard preview handler using the dev kit.  Sadly it was without using the Contacts library, but he mentions it kindly at the end of the post. (C#)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Release&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release is called 1.0 and was released in August.  It's a fully functional API for working with Contacts.  It has all the capabilities of the Vista IContact COM APIs exposed so the property collections are strongly typed in addition to providing access via the property path approach of the native APIs.  It contains numerous bug fixes and performance improvements over previous releases of Contacts.Net.  This release accomplishes most of what I originally planned with this project, which is reflected in the version number.&lt;br /&gt; &lt;br /&gt;The UI originally intended to be part of this has been forked into another project, &lt;a href="http://codeplex.com/Conmigo" class="externalLink"&gt;Conmigo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  As such this is still intended to be a developer release.  The original loose UI is still present as an example of how the APIs can be used.&lt;br /&gt; &lt;br /&gt;Some features contained in Contacts.Net that are more than what is available in the native IContact APIs include&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Import and export from vCard format&lt;/li&gt;&lt;li&gt;Better group support, including the ability to work with two different types of groups: one is the .group format supported by WAB in Vista, the other is a format using the underlying XML schema that is consumable by clients directly accessing the XML.&lt;/li&gt;&lt;li&gt;The ability to work with contact collections not rooted in the user's Contacts folder.&lt;/li&gt;&lt;li&gt;User tile framing consistent with the Vista UI.&lt;/li&gt;&lt;li&gt;Per-property attribute information.&lt;/li&gt;&lt;li&gt;UI.  For a preview, check out the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Screenshots&amp;amp;referringTitle=Home"&gt;Screenshots&lt;/a&gt; page.&lt;/li&gt;&lt;li&gt;Works on XP.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There's also a secondary release called ContactsBridge (similar to the Vista SDK's VistaBridge).  It is purely a .Net wrapper on top of the native IContact APIs accessed via COM Interop.  As such bugs and inconsistencies in the Vista implementation are exposed by it.  It is a fork of an older version of the Contacts.Net library when more was being done via interop.  It's still hosted here for propsperity as an academic example of a large COM interop library (again, similar to VistaBridge) or for those who have a need for using wab32 in a more direct way.&lt;br /&gt; &lt;br /&gt;If you've been using previous versions of the library these are the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking%20Changes&amp;amp;referringTitle=Home"&gt;Breaking Changes&lt;/a&gt; you should be aware of between different versions.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class%20Diagrams&amp;amp;referringTitle=Home"&gt;Class Diagrams&lt;/a&gt; page describes the APIs at a high level.&lt;br /&gt;There is also a &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Home"&gt;Sample Code&lt;/a&gt; page with simple examples of the library in action.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms735779.aspx" class="externalLink"&gt;MSDN documentation&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; about the COM interfaces provided with the Windows SDK is also available.&lt;br /&gt; &lt;br /&gt;As part of developing this API, I've found some interesting behavior in the native implementation of the IContact APIs.  These notes might serve well for developers working with the native APIs.  They're archived in the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;amp;referringTitle=Home"&gt;Gotchas&lt;/a&gt; page.&lt;br /&gt; &lt;br /&gt;See other developer tools that are part of Microsoft's shared source initiative at&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx" class="externalLink"&gt;http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Fri, 17 Oct 2008 18:55:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081017065520P</guid></item><item><title>Updated Wiki: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=16</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between 1.0.1 and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added Contact.GetAttributes function.&lt;/li&gt;&lt;li&gt;Added ILabeledPropertyCollection.GetNameAt&lt;/li&gt;&lt;li&gt;Added implicit cast operators for the &lt;i&gt;Type&lt;/i&gt;Builder to &lt;i&gt;Type&lt;/i&gt; conversions for types like Name, EmailAddress, PhysicalAddress, etc.  This makes property setting syntax a bit less burdensome in languages like C#.&lt;/li&gt;&lt;li&gt;(New in 1.0.1) Renamed ContactTypes.Business to ContactTypes.Organization, along with the associated file extensions, due to strong customer feedback.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint|Type| -&amp;gt; Thumbprint|Type|&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Replaced engendered PersonLabels with androgenous versions, e.g. Mother/Father -&amp;gt; Parent, Brother/Sister -&amp;gt; Sibling.&lt;/li&gt;&lt;li&gt;Changed the properties that are exposed on Person and PersonBuilder so that they don't affect each other as directly.  A loaded Contact is no longer available from Person.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs (Not API breaking, but will result in different behaviors).&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Tue, 02 Sep 2008 16:47:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Breaking Changes 20080902044706P</guid></item><item><title>Updated Wiki: Class Diagrams</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class Diagrams&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
These are snapshots of the pertinent class hierarchies in the project.&lt;br /&gt;&lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Class%20Diagrams"&gt;Sample Code&lt;/a&gt; is also available.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Contacts&amp;amp;DownloadId=41158" alt="Managed Contact API.png" /&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Mon, 11 Aug 2008 18:43:50 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Class Diagrams 20080811064350P</guid></item><item><title>Updated Wiki: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=15</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between 1.0 and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added Contact.GetAttributes function.&lt;/li&gt;&lt;li&gt;Added ILabeledPropertyCollection.GetNameAt&lt;/li&gt;&lt;li&gt;Added implicit cast operators for the &lt;i&gt;Type&lt;/i&gt;Builder to &lt;i&gt;Type&lt;/i&gt; conversions for types like Name, EmailAddress, PhysicalAddress, etc.  This makes property setting syntax a bit less burdensome in languages like C#.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint|Type| -&amp;gt; Thumbprint|Type|&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Replaced engendered PersonLabels with androgenous versions, e.g. Mother/Father -&amp;gt; Parent, Brother/Sister -&amp;gt; Sibling.&lt;/li&gt;&lt;li&gt;Changed the properties that are exposed on Person and PersonBuilder so that they don't affect each other as directly.  A loaded Contact is no longer available from Person.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs (Not API breaking, but will result in different behaviors).&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Mon, 11 Aug 2008 18:36:34 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Breaking Changes 20080811063634P</guid></item><item><title>Updated Wiki: Version Roadmap</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Version Roadmap&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;Removed&lt;/i&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Mon, 11 Aug 2008 18:32:33 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Version Roadmap 20080811063233P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Home&amp;version=28</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Use Windows Contacts from C#&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Welcome!&lt;br /&gt; &lt;br /&gt;Contacts.Net is a managed API for working with the new .Contact format introduced with Microsoft Windows Vista.  This lets developers incorporate Windows Contacts into their applications using any .Net language, such as C#, VB.Net, C++/CLI, F#, etc., using a higher level and more strongly typed object model than what's exposed by the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms735866(VS.85).aspx" class="externalLink"&gt;COM IContact APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; published with the Windows Vista SDK.  Long term it is also intended to be a set of reusable widgets for displaying contact data in the context of larger programs, similar to what the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms629361.aspx" class="externalLink"&gt;WAB APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; offer.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Coding4Fun&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Wow!  Contacts.Net has been incorporated into the &lt;a href="http://codeplex.com/C4FDevKit" class="externalLink"&gt;Coding4Fun developer kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (also hosted on Codeplex) :)&lt;br /&gt;This is part of the Visual Studio Express release, and includes lots of useful utilities beyond contacts.  The folks at Clarity Consulting have added classes and services on top of the core library - source included - that make using contacts in your app as easy as dragging items from the toolbar into your app.  It even includes a sample address book built on top of it and a quick start guide describing how to create something similar.  Very cool stuff!  An overview of the entire kit is available at &lt;a href="http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx" class="externalLink"&gt;http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The version of Contacts used by C4F is based on Contacts.Net code close to the .8 release, so there's additional goodness in current releases that isn't in the dev kit.&lt;br /&gt; &lt;br /&gt;There are some articles online using the C4F dev kit:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/coding4fun/archive/2007/12/28/6893024.aspx" class="externalLink"&gt;This&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a sample that uses the Contacts component to copy your Facebook contacts to your bluetooth phone. (C#, VB.Net)&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/AVCardPreviewHandlerUsingTheCoding4FunDevKit.aspx" class="externalLink"&gt;Scott Hanselman&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; wrote a vCard preview handler using the dev kit.  Sadly it was without using the Contacts library, but he mentions it kindly at the end of the post. (C#)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Release&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release is called 1.0 and was released in August.  It's a fully functional API for working with Contacts.  It has all the capabilities of the Vista IContact COM APIs exposed so the property collections are strongly typed in addition to providing access via the property path approach of the native APIs.  It contains numerous bug fixes and performance improvements over previous releases of Contacts.Net.  This release accomplishes most of what I originally planned with this project, which is reflected in the version number.&lt;br /&gt; &lt;br /&gt;The UI originally intended to be part of this has been forked into another project, &lt;a href="http://codeplex.com/Conmigo" class="externalLink"&gt;Conmigo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  As such this is still intended to be a developer release.  The original loose UI is still present as an example of how the APIs can be used.&lt;br /&gt; &lt;br /&gt;Some features contained in Contacts.Net that are more than what is available in the native IContact APIs include&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Import and export from vCard format&lt;/li&gt;&lt;li&gt;Better group support, including the ability to work with two different types of groups: one is the .group format supported by WAB in Vista, the other is a format using the underlying XML schema that is consumable by clients directly accessing the XML.&lt;/li&gt;&lt;li&gt;The ability to work with contact collections not rooted in the user's Contacts folder.&lt;/li&gt;&lt;li&gt;User tile framing consistent with the Vista UI.&lt;/li&gt;&lt;li&gt;Per-property attribute information.&lt;/li&gt;&lt;li&gt;UI.  For a preview, check out the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Screenshots&amp;amp;referringTitle=Home"&gt;Screenshots&lt;/a&gt; page.&lt;/li&gt;&lt;li&gt;Works on XP.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There's also a secondary release called ContactsBridge (similar to the Vista SDK's VistaBridge).  It is purely a .Net wrapper on top of the native IContact APIs accessed via COM Interop.  As such bugs and inconsistencies in the Vista implementation are exposed by it.  It is a fork of an older version of the Contacts.Net library when more was being done via interop.  It's still hosted here for propsperity as an academic example of a large COM interop library (again, similar to VistaBridge) or for those who have a need for using wab32 in a more direct way.&lt;br /&gt; &lt;br /&gt;If you've been using previous versions of the library these are the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking%20Changes&amp;amp;referringTitle=Home"&gt;Breaking Changes&lt;/a&gt; you should be aware of between different versions.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class%20Diagrams&amp;amp;referringTitle=Home"&gt;Class Diagrams&lt;/a&gt; page describes the APIs at a high level.&lt;br /&gt;There is also a &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Home"&gt;Sample Code&lt;/a&gt; page with simple examples of the library in action.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms735779.aspx" class="externalLink"&gt;MSDN documentation&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; about the COM interfaces provided with the Windows SDK is also available.&lt;br /&gt; &lt;br /&gt;As part of developing this API, I've found some interesting behavior in the native implementation of the IContact APIs.  These notes might serve well for developers working with the native APIs.  They're archived in the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;amp;referringTitle=Home"&gt;Gotchas&lt;/a&gt; page.&lt;br /&gt; &lt;br /&gt;See other developer tools that are part of Microsoft's shared source initiative at&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx" class="externalLink"&gt;http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Mon, 11 Aug 2008 18:31:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080811063137P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Home&amp;version=27</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Use Windows Contacts from C#&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Welcome!&lt;br /&gt; &lt;br /&gt;Contacts.Net is a managed API for working with the new .Contact format introduced with Microsoft Windows Vista.  This lets developers incorporate Windows Contacts into their applications using any .Net language, such as C#, VB.Net, C++/CLI, F#, etc., using a higher level and more strongly typed object model than what's exposed by the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms735866(VS.85).aspx" class="externalLink"&gt;COM IContact APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; published with the Windows Vista SDK.  Long term it is also intended to be a set of reusable widgets for displaying contact data in the context of larger programs, similar to what the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms629361.aspx" class="externalLink"&gt;WAB APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; offer.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Coding4Fun&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Wow!  Contacts.Net has been incorporated into the &lt;a href="http://codeplex.com/C4FDevKit" class="externalLink"&gt;Coding4Fun developer kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (also hosted on Codeplex) :)&lt;br /&gt;This is part of the Visual Studio Express release, and includes lots of useful utilities beyond contacts.  The folks at Clarity Consulting have added classes and services on top of the core library - source included - that make using contacts in your app as easy as dragging items from the toolbar into your app.  It even includes a sample address book built on top of it and a quick start guide describing how to create something similar.  Very cool stuff!  An overview of the entire kit is available at &lt;a href="http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx" class="externalLink"&gt;http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The version of Contacts used by C4F is based on Contacts.Net code close to the .8 release, so there's additional goodness in current releases that isn't in the dev kit.&lt;br /&gt; &lt;br /&gt;There are some articles online using the C4F dev kit:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/coding4fun/archive/2007/12/28/6893024.aspx" class="externalLink"&gt;This&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a sample that uses the Contacts component to copy your Facebook contacts to your bluetooth phone. (C#, VB.Net)&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/AVCardPreviewHandlerUsingTheCoding4FunDevKit.aspx" class="externalLink"&gt;Scott Hanselman&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; wrote a vCard preview handler using the dev kit.  Sadly it was without using the Contacts library, but he mentions it kindly at the end of the post. (C#)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Release&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release is called 1.0 and was released in August.  It's a fully functional API for working with Contacts.  It has all the capabilities of the Vista IContact COM APIs exposed so the property collections are strongly typed in addition to providing access via the property path approach of the native APIs.  It contains numerous bug fixes and performance improvements over previous releases of Contacts.Net.  This release accomplishes most of what I originally planned with this project, which is reflected in the version number.&lt;br /&gt; &lt;br /&gt;The UI originally intended to be part of this has been forked into another project, &lt;a href="http://codeplex.com/Conmigo" class="externalLink"&gt;Conmigo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  As such this is still intended to be a developer release.  The original loose UI is still present as an example of how the APIs can be used.&lt;br /&gt; &lt;br /&gt;Some features contained in Contacts.Net that are more than what is available in the native IContact APIs include&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Import and export from vCard format&lt;/li&gt;&lt;li&gt;The ability to work with two different types of groups: one is the .group format supported by WAB in Vista, the other is a format using the underlying XML schema that is consumable by clients directly accessing the XML.&lt;/li&gt;&lt;li&gt;The ability to work with contact collections not rooted in the user's Contacts folder.&lt;/li&gt;&lt;li&gt;UI.  For a preview, check out the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Screenshots&amp;amp;referringTitle=Home"&gt;Screenshots&lt;/a&gt; page.&lt;/li&gt;&lt;li&gt;Works on XP.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There's also a secondary release called ContactsBridge (similar to the Vista SDK's VistaBridge).  It is purely a .Net wrapper on top of the native IContact APIs accessed via COM Interop.  As such bugs and inconsistencies in the Vista implementation are exposed by it.  It is a fork of an older version of the Contacts.Net library when more was being done via interop.  It's still hosted here for propsperity as an academic example of a large COM interop library (again, similar to VistaBridge) or for those who have a need for using wab32 in a more direct way.&lt;br /&gt; &lt;br /&gt;For specific details on the features being worked on in anticipation of &amp;quot;Contacts.Net 1.0&amp;quot; the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Version%20Roadmap&amp;amp;referringTitle=Home"&gt;Version Roadmap&lt;/a&gt; is being worked on.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;If you've been using previous versions of the library these are the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking%20Changes&amp;amp;referringTitle=Home"&gt;Breaking Changes&lt;/a&gt; you should be aware of between different versions.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class%20Diagrams&amp;amp;referringTitle=Home"&gt;Class Diagrams&lt;/a&gt; page describes the APIs at a high level.&lt;br /&gt;There is also a &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Home"&gt;Sample Code&lt;/a&gt; page with simple examples of the library in action.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms735779.aspx" class="externalLink"&gt;MSDN documentation&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; about the COM interfaces provided with the Windows SDK is also available.&lt;br /&gt; &lt;br /&gt;As part of developing this API, I've found some interesting behavior in the native implementation of the IContact APIs.  These notes might serve well for developers working with the native APIs.  They're archived in the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;amp;referringTitle=Home"&gt;Gotchas&lt;/a&gt; page.&lt;br /&gt; &lt;br /&gt;See other developer tools that are part of Microsoft's shared source initiative at&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx" class="externalLink"&gt;http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Mon, 11 Aug 2008 18:29:09 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080811062909P</guid></item><item><title>Updated Wiki: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=14</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes in current source tree and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added Contact.GetAttributes function.&lt;/li&gt;&lt;li&gt;Added ILabeledPropertyCollection.GetNameAt&lt;/li&gt;&lt;li&gt;Added implicit cast operators for the &lt;i&gt;Type&lt;/i&gt;Builder to &lt;i&gt;Type&lt;/i&gt; conversions for types like Name, EmailAddress, PhysicalAddress, etc.  This makes property setting syntax a bit less burdensome in languages like C#.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint|Type| -&amp;gt; Thumbprint|Type|&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Replaced engendered PersonLabels with androgenous versions, e.g. Mother/Father -&amp;gt; Parent, Brother/Sister -&amp;gt; Sibling.&lt;/li&gt;&lt;li&gt;Changed the properties that are exposed on Person and PersonBuilder so that they don't affect each other as directly.  A loaded Contact is no longer available from Person.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs (Not API breaking, but will result in different behaviors).&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Thu, 07 Aug 2008 01:36:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Breaking Changes 20080807013629A</guid></item><item><title>UPDATED WIKI: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=13</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes in current source tree and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added Contact.GetAttributes function.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint|Type| -&amp;gt; Thumbprint|Type|&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Replaced engendered PersonLabels with androgenous versions, e.g. Mother/Father -&amp;gt; Parent, Brother/Sister -&amp;gt; Sibling.&lt;/li&gt;&lt;li&gt;Changed the properties that are exposed on Person and PersonBuilder so that they don't affect each other as directly.  A loaded Contact is no longer available from Person.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs (Not API breaking, but will result in different behaviors).&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Sat, 12 Apr 2008 22:31:08 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Breaking Changes 20080412103108P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Home&amp;version=26</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Use Windows Contacts from C#&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Welcome!&lt;br /&gt; &lt;br /&gt;Contacts.Net is a managed API for working with the new .Contact format introduced with Microsoft Windows Vista.  This lets developers incorporate Windows Contacts into their applications using any .Net language, such as C#, VB.Net, C++/CLI, F#, etc., using a higher level and more strongly typed object model than what's exposed by the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms735866(VS.85).aspx" class="externalLink"&gt;COM IContact APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; published with the Windows Vista SDK.  Long term it is also intended to be a set of reusable widgets for displaying contact data in the context of larger programs, similar to what the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms629361.aspx" class="externalLink"&gt;WAB APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; offer.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Coding4Fun&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Wow!  Contacts.Net has been incorporated into the &lt;a href="http://codeplex.com/C4FDevKit" class="externalLink"&gt;Coding4Fun developer kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (also hosted on Codeplex) :)&lt;br /&gt;This is part of the Visual Studio Express release, and includes lots of useful utilities beyond contacts.  The folks at Clarity Consulting have added classes and services on top of the core library - source included - that make using contacts in your app as easy as dragging items from the toolbar into your app.  It even includes a sample address book built on top of it and a quick start guide describing how to create something similar.  Very cool stuff!  An overview of the entire kit is available at &lt;a href="http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx" class="externalLink"&gt;http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The version of Contacts used by C4F is based on Contacts.Net code close to the .8 release, so there's additional goodness in current releases that isn't in the dev kit.&lt;br /&gt; &lt;br /&gt;There are some articles online using the C4F dev kit:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/coding4fun/archive/2007/12/28/6893024.aspx" class="externalLink"&gt;This&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a sample that uses the Contacts component to copy your Facebook contacts to your bluetooth phone. (C#, VB.Net)&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/AVCardPreviewHandlerUsingTheCoding4FunDevKit.aspx" class="externalLink"&gt;Scott Hanselman&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; wrote a vCard preview handler using the dev kit.  Sadly it was without using the Contacts library, but he mentions it kindly at the end of the post. (C#)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Release&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release is called .9 and was released in October.  It's a fully functional API for working with Contacts.  It has all the functionality of the Vista IContact COM APIs exposed so the property collections are strongly typed, in addition to providing access via the property path approach of the native APIs.  It contains numerous bug fixes over previous releases of Contacts.Net.&lt;br /&gt; &lt;br /&gt;This is still intended to be a developer release, although it does contain some loose UI.  The point of the release is to solicit feedback on the APIs to verify correctness in implementation and design.  As the version gets closer to a 1.0 much greater caution will go into making API and design changes.  Code written against this version of the library should be easily changed to work with the eventual 1.0 release.&lt;br /&gt; &lt;br /&gt;Some features contained in Contacts.Net that are more than what is available in the native IContact APIs include&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Import and export from vCard format&lt;/li&gt;&lt;li&gt;The ability to work with two different types of groups: one is the .group format supported by WAB in Vista, the other is a format using the underlying XML schema that is consumable by clients directly accessing the XML.&lt;/li&gt;&lt;li&gt;The ability to work with contact collections not rooted in the user's Contacts folder.&lt;/li&gt;&lt;li&gt;UI.  For a preview, check out the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Screenshots&amp;amp;referringTitle=Home"&gt;Screenshots&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There's also a secondary release called ContactsBridge (similar to the Vista SDK's VistaBridge).  It is purely a .Net wrapper on top of the native IContact APIs accessed via COM Interop.  As such bugs and inconsistencies in the Vista implementation are exposed by it.  It is a fork of an older version of the Contacts.Net library when more was being done via interop.  It's still hosted here for propsperity as an academic example of a large COM interop library (again, similar to VistaBridge) or for those who have a need for using wab32 in a more direct way.&lt;br /&gt; &lt;br /&gt;For specific details on the features being worked on in anticipation of &amp;quot;Contacts.Net 1.0&amp;quot; the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Version%20Roadmap&amp;amp;referringTitle=Home"&gt;Version Roadmap&lt;/a&gt; is being worked on.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;If you've been using previous versions of the library these are the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking%20Changes&amp;amp;referringTitle=Home"&gt;Breaking Changes&lt;/a&gt; you should be aware of between different versions.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class%20Diagrams&amp;amp;referringTitle=Home"&gt;Class Diagrams&lt;/a&gt; page describes the APIs at a high level.&lt;br /&gt;There is also a &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Home"&gt;Sample Code&lt;/a&gt; page with simple examples of the library in action.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms735779.aspx" class="externalLink"&gt;MSDN documentation&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; about the COM interfaces provided with the Windows SDK is also available.&lt;br /&gt; &lt;br /&gt;As part of developing this API, I've found some interesting behavior in the native implementation of the IContact APIs.  These notes might serve well for developers working with the native APIs.  They're archived in the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;amp;referringTitle=Home"&gt;Gotchas&lt;/a&gt; page.&lt;br /&gt; &lt;br /&gt;See other developer tools that are part of Microsoft's shared source initiative at&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx" class="externalLink"&gt;http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Wed, 13 Feb 2008 16:28:38 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080213042838P</guid></item><item><title>UPDATED WIKI: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=12</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes in current source tree and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;None so far.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and .9
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint|Type| -&amp;gt; Thumbprint|Type|&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Replaced engendered PersonLabels with androgenous versions, e.g. Mother/Father -&amp;gt; Parent, Brother/Sister -&amp;gt; Sibling.&lt;/li&gt;&lt;li&gt;Changed the properties that are exposed on Person and PersonBuilder so that they don't affect each other as directly.  A loaded Contact is no longer available from Person.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Tue, 30 Oct 2007 19:57:01 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Breaking Changes 20071030075701P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Home&amp;version=25</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Contacts.Net&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Welcome!&lt;br /&gt; &lt;br /&gt;Contacts.Net is a managed API for working with the new .Contact format introduced with Microsoft Windows Vista.  Long term it is also intended to be a set of reusable widgets for displaying contact data in the context of larger programs, similar to what the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms629361.aspx" class="externalLink"&gt;WAB APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; offer.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Coding4Fun&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Wow!  Contacts.Net has been incorporated into the &lt;a href="http://codeplex.com/C4FDevKit" class="externalLink"&gt;Coding4Fun developer kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (also hosted on Codeplex) :)&lt;br /&gt;This is part of the Visual Studio Express Beta 2 release, and includes lots of useful utilities beyond contacts.  The folks at Clarity Consulting have added classes and services on top of the core library - source included - that make using contacts in your app as easy as dragging items from the toolbar into your app.  It even includes a sample address book built on top of it and a quick start guide describing how to create something similar.  Very cool stuff!  An overview of the entire kit is available at &lt;a href="http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx" class="externalLink"&gt;http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;It's still beta (as is Contacts.Net) so feedback is appreciated.  If you use it drop a line on the project's discussion page and let them know what you think.&lt;br /&gt; &lt;br /&gt;&lt;i&gt;Note: the version of Contacts used by C4F is close to the .8 release, plus extensions done by Clarity Consulting.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Release&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release is called .9 and was released in October.  It's a fully functional API for working with Contacts.  It has all the functionality of the Vista IContact COM APIs exposed so the property collections are strongly typed, in addition to providing access via the property path approach of the native APIs.  It contains numerous bug fixes over previous releases of Contacts.Net.&lt;br /&gt; &lt;br /&gt;This is still intended to be a developer release, although it does contain some loose UI.  The point of the release is to solicit feedback on the APIs to verify correctness in implementation and design.  As the version gets closer to a 1.0 much greater caution will go into making API and design changes.  Code written against this version of the library should be easily changed to work with the eventual 1.0 release.&lt;br /&gt; &lt;br /&gt;Some features contained in Contacts.Net that are more than what is available in the native IContact APIs include&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Import and export from vCard format&lt;/li&gt;&lt;li&gt;The ability to work with two different types of groups: one is the .group format supported by WAB in Vista, the other is a format using the underlying XML schema that is consumable by clients directly accessing the XML.&lt;/li&gt;&lt;li&gt;The ability to work with contact collections not rooted in the user's Contacts folder.&lt;/li&gt;&lt;li&gt;UI.  For a preview, check out the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Screenshots&amp;amp;referringTitle=Home"&gt;Screenshots&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There's also a secondary release called ContactsBridge (similar to the Vista SDK's VistaBridge).  It is purely a .Net wrapper on top of the native IContact APIs accessed via COM Interop.  As such bugs and inconsistencies in the Vista implementation are exposed by it.  It is a fork of an older version of the Contacts.Net library when more was being done via interop.  It's still hosted here for propsperity as an academic example of a large COM interop library (again, similar to VistaBridge) or for those who have a need for using wab32 in a more direct way.&lt;br /&gt; &lt;br /&gt;For specific details on the features being worked on in anticipation of &amp;quot;Contacts.Net 1.0&amp;quot; the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Version%20Roadmap&amp;amp;referringTitle=Home"&gt;Version Roadmap&lt;/a&gt; is being worked on.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;If you've been using previous versions of the library these are the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking%20Changes&amp;amp;referringTitle=Home"&gt;Breaking Changes&lt;/a&gt; you should be aware of between different versions.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class%20Diagrams&amp;amp;referringTitle=Home"&gt;Class Diagrams&lt;/a&gt; page describes the APIs at a high level.&lt;br /&gt;There is also a &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Home"&gt;Sample Code&lt;/a&gt; page with simple examples of the library in action.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms735779.aspx" class="externalLink"&gt;MSDN documentation&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; about the COM interfaces provided with the Windows SDK is also available.&lt;br /&gt; &lt;br /&gt;As part of developing this API, I've found some interesting behavior in the native implementation of the IContact APIs.  These notes might serve well for developers working with the native APIs.  They're archived in the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;amp;referringTitle=Home"&gt;Gotchas&lt;/a&gt; page.&lt;br /&gt; &lt;br /&gt;See other developer tools that are part of Microsoft's shared source initiative at&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx" class="externalLink"&gt;http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Tue, 30 Oct 2007 19:56:09 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20071030075609P</guid></item><item><title>UPDATED WIKI: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=11</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes in current source tree and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint|Type| -&amp;gt; Thumbprint|Type|&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Replaced engendered PersonLabels with androgenous versions, e.g. Mother/Father -&amp;gt; Parent, Brother/Sister -&amp;gt; Sibling.&lt;/li&gt;&lt;li&gt;Changed the properties that are exposed on Person and PersonBuilder so that they don't affect each other as directly.  A loaded Contact is no longer available from Person.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Sun, 07 Oct 2007 06:26:55 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Breaking Changes 20071007062655A</guid></item><item><title>UPDATED WIKI: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes in current source tree and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint|Type| -&amp;gt; Thumbprint|Type|&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Replaced engendered PersonLabels with androgenous versions, e.g. Mother/Father -&amp;gt; Parent, Brother/Sister -&amp;gt; Sibling.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Sun, 07 Oct 2007 06:15:53 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Breaking Changes 20071007061553A</guid></item><item><title>UPDATED WIKI: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes in current source tree and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;The interop namespace is no longer public.  It's functionality is still available through the ContactBridge project but the current release isn't so much wrapping the COM APIs as it is reimplementing the functionality.  As such what's left of the namespace has been internalized.&lt;/li&gt;&lt;li&gt;FxCop property and class name cleanup, including:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Certificate/CertificateBuilder: Type -&amp;gt; ValueType, ThumbPrint&lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Type&amp;amp;referringTitle=Breaking%20Changes"&gt;Type&lt;/a&gt; -&amp;gt; Thumbprint&lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Type&amp;amp;referringTitle=Breaking%20Changes"&gt;Type&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ContactType -&amp;gt; ContactTypes&lt;/li&gt;&lt;li&gt;EmailAddress/EmailAddressBuilder: Type -&amp;gt; AddressType&lt;/li&gt;&lt;li&gt;Name/NameBuilder: NickName -&amp;gt; Nickname&lt;/li&gt;&lt;li&gt;ContactCommitOptions.ForceSyncStorageWithFormattedName no longer includes the non-force flag value.&lt;/li&gt;&lt;li&gt;ContactCollectionChangedEventHandler -&amp;gt; EventHandler&amp;lt;ContactCollectionChangedEventArgs&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Sun, 26 Aug 2007 06:16:11 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Breaking Changes 20070826061611A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Home&amp;version=24</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Contacts.Net&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Welcome!&lt;br /&gt; &lt;br /&gt;Contacts.Net is a managed API for working with the new .Contact format introduced with Microsoft Windows Vista.  Long term it is also intended to be a set of reusable widgets for displaying contact data in the context of larger programs, similar to what the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms629361.aspx" class="externalLink"&gt;WAB APIs&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; offer.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Coding4Fun&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Wow!  Contacts.Net has been incorporated into the &lt;a href="http://codeplex.com/C4FDevKit" class="externalLink"&gt;Coding4Fun developer kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (also hosted on Codeplex) :)&lt;br /&gt;This is part of the Visual Studio Express Beta 2 release, and includes lots of useful utilities beyond contacts.  The folks at Clarity Consulting have added classes and services on top of the core library - source included - that make using contacts in your app as easy as dragging items from the toolbar into your app.  It even includes a sample address book built on top of it and a quick start guide describing how to create something similar.  Very cool stuff!  An overview of the entire kit is available at &lt;a href="http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx" class="externalLink"&gt;http://msdn2.microsoft.com/en-us/express/future/bb679917.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;It's still beta (as is Contacts.Net) so feedback is appreciated.  If you use it drop a line on the project's discussion page and let them know what you think.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Release&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;There are actually two current releases:&lt;br /&gt; &lt;br /&gt;The primary current release is called .8 and was released in June.  It's a fully functional API for working with Contacts.  It has all the functionality of the Vista IContact COM APIs exposed so the property collections are strongly typed, in addition to providing access via the property path approach of the native APIs.&lt;br /&gt; &lt;br /&gt;There's also a secondary release called ContactsBridge (similar to the Vista SDK's VistaBridge).  It is purely a .Net wrapper on top of the native IContact APIs accessed via COM Interop.  As such bugs and inconsistencies in the Vista implementation are exposed by it.  Your mileage may vary, but there are performance reasons one may want to use this one over version .8.&lt;br /&gt; &lt;br /&gt;Both of these are still intended to be developer releases, though .8 does contain some loose UI.  The point of the release is to solicit feedback on the APIs to verify correctness in implementation and design.  As the version gets closer to a 1.0 much greater caution will go into making any API or design changes.  Code written against this version of the library should be easily changed to work with the eventual 1.0 release.&lt;br /&gt; &lt;br /&gt;Some features contained in Contacts.Net that are more than what is available in the native IContact APIs include&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Import and export from vCard format&lt;/li&gt;&lt;li&gt;The ability to work with two different types of groups: one is the .group format supported by WAB in Vista, the other is a format using the underlying XML schema that is consumable by clients directly accessing the XML.&lt;/li&gt;&lt;li&gt;The ability to work with contact collections not rooted in the user's Contacts folder.&lt;/li&gt;&lt;li&gt;UI.  For a preview, check out the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Screenshots&amp;amp;referringTitle=Home"&gt;Screenshots&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;For specific details on the features being worked on in anticipation of &amp;quot;Contacts.Net 1.0&amp;quot; the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Version%20Roadmap&amp;amp;referringTitle=Home"&gt;Version Roadmap&lt;/a&gt; is being worked on.&lt;br /&gt; &lt;br /&gt;If you've been using previous versions of the library these are the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking%20Changes&amp;amp;referringTitle=Home"&gt;Breaking Changes&lt;/a&gt; you should be aware of between different versions.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Class%20Diagrams&amp;amp;referringTitle=Home"&gt;Class Diagrams&lt;/a&gt; page describes the APIs at a high level.&lt;br /&gt;There is also a &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Sample%20Code&amp;amp;referringTitle=Home"&gt;Sample Code&lt;/a&gt; page with simple examples of the library in action.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms735779.aspx" class="externalLink"&gt;MSDN documentation&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; about the COM interfaces provided with the Windows SDK is also available.&lt;br /&gt; &lt;br /&gt;As part of developing this API, I've found some interesting behavior in the native implementation of the IContact APIs.  These notes might serve well for developers working with the native APIs.  They're archived in the &lt;a href="http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;amp;referringTitle=Home"&gt;Gotchas&lt;/a&gt; page.&lt;br /&gt; &lt;br /&gt;See other developer tools that are part of Microsoft's shared source initiative at&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx" class="externalLink"&gt;http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Mon, 13 Aug 2007 00:20:03 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20070813122003A</guid></item><item><title>UPDATED WIKI: Breaking Changes</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Breaking Changes&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;i&gt;This generally only covers changes to APIs that existed in the prior release.  For overviews of architectural changes and additions you should consult the class diagrams that accompany the release.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes in current source tree and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Import to ContactManager.AddContact.&lt;/li&gt;&lt;li&gt;Much of the interop namespace is gone.  Its functionality still available through the ContactBridge release but the COM interop declarations are being removed as they are no longer needed.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .8 and Contacts Bridge 1.0
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Removed ContactManager constructors that allow for different RootDirectories&lt;/li&gt;&lt;li&gt;Removed ContactType enumeration and property from Contact&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;By extension, ContactCollection support for types other than .contact has been removed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Removed GroupView and MapiGroupView&lt;/li&gt;&lt;li&gt;Removed managed shims atop IContactPropertyCollection and IContactManager - implementations are now direct callthroughs to Vista COM APIs.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Breaking Changes between .1 and .8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Renamed ContactManager.Load to ContactManager.GetContact&lt;/li&gt;&lt;li&gt;Person struct changed to add strong-typing to the PersonId format.&lt;/li&gt;&lt;li&gt;ILabeledPropertyCollection interface changed to have more indexer overloads so XAML will parse it.&lt;/li&gt;&lt;li&gt;Renamed ContactCommitOptions.Default to ContactCommitOptions.None (FxCop)&lt;/li&gt;&lt;li&gt;(Please add any others)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Sat, 11 Aug 2007 22:15:52 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Breaking Changes 20070811101552P</guid></item><item><title>UPDATED WIKI: Gotchas</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
This is a list of funny behavior found in the IContact APIs.  Feel free to add and update as appropriate.&lt;br /&gt;(To avoid accidental markup tags, some _'s are displayed at -'s)&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;IContactProperties&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;CreateArrayNode&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;The fAppend parameter only accepts 1 (TRUE) and 0 (FALSE).  This is a stricter interpretation of the BOOL type than is generally used.  Using any other value will return E_INVALIDARG.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;DeleteArrayNode/DeleteProperty&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;These two can generally be used interchangeably.  If validation is needed generally checking whether the last character is ']' should be sufficient.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;GetLabels&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Returns S-OK with an empty label-set for properties that don't exist in the contact (even ones that don't represent array nodes, like &amp;quot;Notes&amp;quot;).  According to documentation (and reasonable expectations) it should return HRESULT-FROM-WIN32(ERROR-PATH-NOT-FOUND).  If it matters, check for whether the property exists before requesting its labels.&lt;/li&gt;&lt;li&gt;Returns E_FAIL for simple extension array nodes that don't exist in the contact.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;GetString&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Returns S-OK for existing simple extension array nodes when there are child values.  It's supposed to return S-FALSE, as that's the way to check for an array-node's existence.  In addition, the concatenated child values are returned as the result of the GetString call.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;SetBinary&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;The provided stream must both support Stat and have its Seek pointer set to the beginning of the stream, otherwise the function will return E_UNEXPECTED.  This isn't currently documented in the IDL file or on MSDN.&lt;/li&gt;&lt;li&gt;The provided stream must also be non-empty.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;SetString&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Calls on simple extension array nodes return S-OK.  It should return HRESULT-FROM-WIN32(ERROR-INVALID-DATA-TYPE).  I haven't checked where it ends up in the backing XML or whether GetString returns the data, callers just shouldn't call SetString this way.  The reason for calling this out is that the error code is a fast way of catching the mistake of setting the string on the return value of CreateArrayNode and forgetting to append an L3 property, so clients need to be a bit more proactively aware.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Contact's implementation of IPersistStream&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Load&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;The internal implementation takes a reference to the provided stream via AddRef.  It basically assumes that the stream is immutable, so in some circumstances it may reparse the stream.  Callers need to be careful not to change it after it's been passed to the Load call.  Managed callers need to be careful to respect the AddRef semantics and not dispose of the stream.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Save&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;For this call to work right clients need to ensure that the seek pointer of the stream being saved to is at the beginning of the stream and that the starting size of the stream is not larger than the contact data.  If the contact is smaller than the original content then the garbage is left at the end and the stream won't contain valid XML.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;IContactPropertyCollection&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Next&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;IContactPropertyCollection will sometimes skip over hierarchically stored simple extension properties.  The rub of whether it gets skipped or not depends on whether the backing contact is in read-only mode.  If the contact instance hasn't modified any data since it was loaded then generally it won't skip these values; otherwise it generally does.  The workaround is to reload the contact for the enumeration, but I realize this isn't possible or pragmatic for most uses.  A way to work around this is to save the contact to disk somewhere and then load the copy, performing the enumeration on that snapshot. (This is the way some versions of Contacts.Net hide the behavior).&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Regarding Labels&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Note that the following is about conventions.  The following is not enforced by the APIs, native or managed.&lt;/li&gt;&lt;li&gt;Contacts use labels on hierarchical properties to provide additional context about data.  For example, a physical address with the label &amp;quot;Personal&amp;quot; would indicate a home address.  To avoid situations where a third party program's addition of a label changes the attributes of a property--e.g. adding &amp;quot;Summer House&amp;quot; to the &amp;quot;Personal&amp;quot; address doesn't necessarily make it no longer the home address--additional labels may be required on general properties to prevent ambiguities.  This makes more sense with examples:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Use the &amp;quot;Voice&amp;quot; label for standard phone numbers.  This disambiguates a &amp;quot;Business&amp;quot; phone number from a &amp;quot;Business&amp;quot; &amp;quot;Fax&amp;quot; phone number.  Generally &amp;quot;Fax&amp;quot;, &amp;quot;Pager&amp;quot;, &amp;quot;Voice&amp;quot;, &amp;quot;Video&amp;quot;, and &amp;quot;TTY&amp;quot; are mutually exclusive and exactly one should be on any phone number.&lt;/li&gt;&lt;li&gt;To make a Photo appear as a user tile in programs, add the &amp;quot;UserTile&amp;quot; label.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Fri, 10 Aug 2007 20:11:59 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Gotchas 20070810081159P</guid></item><item><title>UPDATED WIKI: Gotchas</title><link>http://www.codeplex.com/Contacts/Wiki/View.aspx?title=Gotchas&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
This is a list of funny behavior found in the IContact APIs.  Feel free to add and update as appropriate.&lt;br /&gt;(To avoid accidental markup tags, some _'s are displayed at -'s)&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;IContactProperties&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;CreateArrayNode&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;The fAppend parameter only accepts 1 (TRUE) and 0 (FALSE).  This is a stricter interpretation of the BOOL type than is generally used.  Using any other value will return E_INVALIDARG.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;DeleteArrayNode/DeleteProperty&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;These two can generally be used interchangeably.  If validation is needed generally checking whether the last character is ']' should be sufficient.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;GetLabels&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Returns S-OK with an empty label-set for properties that don't exist in the contact (even ones that don't represent array nodes, like &amp;quot;Notes&amp;quot;).  According to documentation (and reasonable expectations) it should return HRESULT-FROM-WIN32(ERROR-PATH-NOT-FOUND).  If it matters, check for whether the property exists before requesting its labels.&lt;/li&gt;&lt;li&gt;Returns E_FAIL for simple extension array nodes that don't exist in the contact.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;GetString&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Returns S-OK for existing simple extension array nodes when there are child values.  It's supposed to return S-FALSE, as that's the way to check for an array-node's existence.  In addition, the concatenated child values are returned as the result of the GetString call.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;SetBinary&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;The provided stream must both support Stat and have its Seek pointer set to the beginning of the stream, otherwise the function will return E_UNEXPECTED.  This isn't currently documented in the IDL file or on MSDN.&lt;/li&gt;&lt;li&gt;The provided stream must also be non-empty.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;SetString&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Calls on simple extension array nodes return S-OK.  It should return HRESULT-FROM-WIN32(ERROR-INVALID-DATA-TYPE).  I haven't checked where it ends up in the backing XML or whether GetString returns the data, callers just shouldn't call SetString this way.  The reason for calling this out is that the error code is a fast way of catching the mistake of setting the string on the return value of CreateArrayNode and forgetting to append an L3 property, so clients need to be a bit more proactively aware.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Contact's implementation of IPersistStream&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;For this call to work right clients need to ensure that the seek pointer is at the beginning of the stream and that the starting size of the stream is not larger than the contact data.  If the contact is smaller than the original content then the garbage is left at the end and the stream won't contain valid XML.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;IContactPropertyCollection&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Next&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;IContactPropertyCollection will sometimes skip over hierarchically stored simple extension properties.  The rub of whether it gets skipped or not depends on whether the backing contact is in read-only mode.  If the contact instance hasn't modified any data since it was loaded then generally it won't skip these values; otherwise it generally does.  The workaround is to reload the contact for the enumeration, but I realize this isn't possible or pragmatic for most uses.  A way to work around this is to save the contact to disk somewhere and then load the copy, performing the enumeration on that snapshot. (This is the way some versions of Contacts.Net hide the behavior).&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Regarding Labels&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Note that the following is about conventions.  The following is not enforced by the APIs, native or managed.&lt;/li&gt;&lt;li&gt;Contacts use labels on hierarchical properties to provide additional context about data.  For example, a physical address with the label &amp;quot;Personal&amp;quot; would indicate a home address.  To avoid situations where a third party program's addition of a label changes the attributes of a property--e.g. adding &amp;quot;Summer House&amp;quot; to the &amp;quot;Personal&amp;quot; address doesn't necessarily make it no longer the home address--additional labels may be required on general properties to prevent ambiguities.  This makes more sense with examples:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Use the &amp;quot;Voice&amp;quot; label for standard phone numbers.  This disambiguates a &amp;quot;Business&amp;quot; phone number from a &amp;quot;Business&amp;quot; &amp;quot;Fax&amp;quot; phone number.  Generally &amp;quot;Fax&amp;quot;, &amp;quot;Pager&amp;quot;, &amp;quot;Voice&amp;quot;, &amp;quot;Video&amp;quot;, and &amp;quot;TTY&amp;quot; are mutually exclusive and exactly one should be on any phone number.&lt;/li&gt;&lt;li&gt;To make a Photo appear as a user tile in programs, add the &amp;quot;UserTile&amp;quot; label.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>JoeCastro</author><pubDate>Thu, 09 Aug 2007 21:31:27 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Gotchas 20070809093127P</guid></item></channel></rss>