Tom Hollander's blog

Head in the clouds

Just Released! Enterprise Library 3.0 - April 2007

Just Released! Enterprise Library 3.0 - April 2007

  • Comments 73

Yes, it's finally here. The patterns & practices team is pleased to announce the official release of Enterprise Library 3.0 - April 2007 for the .NET Framework 2.0 and 3.0.  

Highlights of this Release

If you've been keeping up with the Community Technology Preview releases, there shouldn't be anything too surprising in the final release, although the overall quality should be much higher. All of the major new features have already been described on this blog or in other places, but here is a quick summary of the most significant changes:

  • Validation Application Block. Allows you to centrally define validation rules using configuration or attributes, and easily validate data from anywhere in your application, including deep integration with Windows Forms, ASP.NET and WCF.
  • Policy Injection Application Block. Provides a powerful approach for separating cross-cutting concerns from business logic using declarative policies that are attached at runtime to methods on your objects.
  • Application Block Software Factory. Dramatically simplifies the process of building application blocks and providers through the magic of guidance automation.
  • Visual Studio-integrated Configuration Editor. Edit Enterprise Library configuration files directly within Visual Studio.
  • Environmental Overrides. Use the configuration tool to specify configuration settings that are common or different across multiple environments, and merge this information into configuration files to be deployed with your applications.
  • WCF Integration. Easily integrate the Logging, Exception Handling and Validation Application Blocks into service interfaces built using Windows Communication Foundation.
  • Pre-compiled, strong-named binaries. No need to compile and strong name the code unless you want to manage and evolve the code yourself.

This isn't a complete list, and we've made a number of other minor changes that are described in the documentation. But the good news is that, despite all of the improvements in this release, there are no breaking changes in the core APIs and upgrading existing Enterprise Library 2.0 applications should just be a matter of replacing the DLLs and updating the version numbers in the configuration files.

Credit where it's due

One of the cool things about my job is that I get to play a very public role both during development and after the release of our deliverables. Sometimes this creates the impression that I'm responsible for more than I really am. In reality we have a very talented and dedicated team who are generally too busy working to spend much time in the spotlight. I want to take this opportunity to thank everyone in the team for all of the hard work to make this such a great release:

  • Our Development team: Fernando Simonazzi, Chris Tavares, Olaf Conijn, Adrian Alonso and John Socha-Leialoha
  • Our Test team: Hanz Zhang, Mani Krishnaswami, Sateesh Venkata Surya Nadupalli, Terrence Cyril Joseph Anthuvan, Carlos Farre, Eric Blanchet, Meenakshi Krishnamoorthi, Abhinav Bana, Nalini S and Sharadda Arora
  • Our Documentation team: Roberta Leibovitz, William French, Alex Homer, RoAnn Corbisier and Tina Burden McGrayne
  • Our Program Manager, William Loeffler and Architect, Edward Jezierski

Thanks also to everyone, too numerous to mention here, who provided additional management, reviews, advice and guidance during this project. A particularly special thanks to Dave Hayden for his great work in creating tutorials and supporting the community during the development of this release.

Finally, Enterprise Library 3.0 was of course built on the legacy of several previous releases of Enterprise Library, original p&p application blocks and Avanade's ACA.NET. So thanks to everybody who worked on these earlier deliverables, as Enterprise Library would not be a success if it wasn't for the high quality of these earlier codebases.

And thanks to you too!

As I hope you've noticed, the patterns & practices team is completely dependent on architects and developers in the "real world" to guide us on what we should build, what works well and what doesn't work well. This release of Enterprise Library is a prime example of this, with your input playing a huge role from setting the initial direction to identifying minor issues. Thanks to everyone who played a part in the process, whether it was completing the original prioritization survey, participating in our CodePlex community or providing direct feedback to our team. We really appreciate your support, and we look forward to your continued involvement for our future releases.

  • What about the partial trust issue that required a patch of the EntLib 2.0? Will 3.0 also "degrade elegantly" depending on code access security out of the box.. or should I await a patch of 3.0 before I recommend 3.0 to my developers?

  • Yes, the partial trust patch that we released for EntLib 2.0 has been rolled into EntLib 3.0, so you can run under partial trust provided you don't use any features that require a higher trust level.


  • Processos e Agile Ivar Jacobson publicou um artigo com sérias críticas aos processos que dominam o desenvolvimento

  • Tom Hollander's announced the release of Enterprise Library 3.0 which is available for download .

  • Tom,

    one question regarding the symbol files (pdb) for the precompiled binaries of this release.

    Since it's quite interesting for us to have matching pdb for troubleshooting purposes and still being able to use the precompiled and signed(!) binaries, is there a symbol server or a download location for the appropriate pdbs for this release?

    Thanks & best regards


  • Hi. Is there a tutorial of how to this library.


  • Hi,

    I just installed Enterpise Library but the documentation link is broken.  When I click on Enterprise Library Documentation link the Document Explorer opens with the following error: No topics could be located that were relevant to the F1 request.  I see the documentation files on my disk in Module Retargetable Folder, but I have no way to view them without properly registering them with the Document expolorer.  Could you post the proper registration file?

    Thank you.

  • Thanks to Tom and your great team for this release! We users really owe you guys a lot...

    Any plan for hands-on labs wrt the new blocks and WCF integration in the near future?

    thanks again!

  • I have the same problem Alex.  Tom, will you be releasing a CHM/PDF version of the docs as well?  I like to drop a usable version of the docs in with my project's source code so other developers can read them upon checkout - without having to install anything special.

  • I was able to fix the documentation link problem by opening the Document Explorer with the following link:

    "/helpcol ms-help://ms.EntLib.2007Apr /LaunchFKeywordTopic CachingQS1"

    I got this link from one of the QuickStart samples.  I still think this problem needs to be solved at the installer level with the patch.

  • Michael - We're working on making the PDBs for the strong-named binaries available - I'll post details once we've finalized this.

    Lorenzo and Frank - We'll be rolling out more tutorials in the form of webcasts and videos over the coming months - check out for the first couple.

    Alex and Nik - I'm not sure what the issue is here - the doc link from the start menu works fine for me. Is dexplore.exe installed somewhere different to what the shortcut expected? In any case the CHMs are available for separate download at


  • Just playing with the VAB and have come across a problem with the Property Comparison Validator.

    In the Validation QuickStart I added the following validator to the FirstName property in the configuration file

     <validator operator="Equal" propertyToCompare="LastName" negated="true" messageTemplate="First Name cannot be Same as last Name"

      type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.PropertyComparisonValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=, Culture=neutral, PublicKeyToken=null"

      name="Property Comparison Validator" />

    A simple test to check that FirstName and LastName cannot be the same. (I know it could happen but it was just a simple test)

    Anyway I changed the Ruleset to use RuleSetB and clicked Validate. All ran well. I tried different values in First and Last Name and it worked as it should.

    The problem came when I checked the 'Enable Winforms-Integrated Validation'. It presented me with the error.

    System.NullReferenceException was unhandled

     Message="Object reference not set to an instance of an object."



          at Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WinForms.ValidationProvider.GetExistingValidatedControlItem(String sourcePropertyName) in C:\EntLib3Src\App Blocks\Src\Validation\Integration\WinForms\ValidationProvider.cs:line 244

          at Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WinForms.PropertyMappedControlValueAccess.GetValue(Object source, Object& value, String& valueAccessFailureMessage) in C:\EntLib3Src\App Blocks\Src\Validation\Integration\WinForms\PropertyMappedControlValueAccess.cs:line 46

          at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.ValueAccessComparisonValidator.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) in C:\EntLib3Src\App Blocks\Src\Validation\Validators\ValueAccessComparisonValidator.cs:line 115

          at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.AndCompositeValidator.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) in C:\EntLib3Src\App Blocks\Src\Validation\Validators\AndCompositeValidator.cs:line 57

          at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.ValueAccessValidator.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) in C:\EntLib3Src\App Blocks\Src\Validation\Validators\ValueAccessValidator.cs:line 72

          at Microsoft.Practices.EnterpriseLibrary.Validation.Validator.Validate(Object target) in C:\EntLib3Src\App Blocks\Src\Validation\Validator.cs:line 53

          at Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WinForms.ValidationProvider.PerformValidation(ValidatedControlItem validatedControlItem) in C:\EntLib3Src\App Blocks\Src\Validation\Integration\WinForms\ValidationProvider.cs:line 163

          at Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WinForms.ValidatedControlItem.OnValidating(Object source, CancelEventArgs e) in C:\EntLib3Src\App Blocks\Src\Validation\Integration\WinForms\ValidatedControlItem.cs:line 54

          at System.ComponentModel.CancelEventHandler.Invoke(Object sender, CancelEventArgs e)

          at System.Windows.Forms.Control.OnValidating(CancelEventArgs e)

          at System.Windows.Forms.Control.PerformControlValidation(Boolean bulkValidation)

          at System.Windows.Forms.Control.PerformContainerValidation(ValidationConstraints validationConstraints)

          at System.Windows.Forms.Control.PerformContainerValidation(ValidationConstraints validationConstraints)

          at System.Windows.Forms.ContainerControl.ValidateChildren(ValidationConstraints validationConstraints)

          at System.Windows.Forms.Form.ValidateChildren(ValidationConstraints validationConstraints)

          at System.Windows.Forms.Form.ValidateChildren()

          at ValidationQuickStart.MainForm.customerRuleSetCombo_TextChanged(Object sender, EventArgs e) in C:\EntLib3Src\Quick Starts\Validation\CS\ValidationQuickStart\MainForm.cs:line 117

          at System.Windows.Forms.Control.OnTextChanged(EventArgs e)

          at System.Windows.Forms.ComboBox.OnTextChanged(EventArgs e)

          at System.Windows.Forms.Control.set_Text(String value)

          at System.Windows.Forms.ComboBox.set_Text(String value)

          at System.Windows.Forms.ComboBox.UpdateText()

          at System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)

          at System.Windows.Forms.ComboBox.WndProc(Message& m)

          at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

          at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

          at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

          at System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)

          at System.Windows.Forms.Control.SendMessage(Int32 msg, IntPtr wparam, IntPtr lparam)

          at System.Windows.Forms.Control.ReflectMessageInternal(IntPtr hWnd, Message& m)

          at System.Windows.Forms.Control.WmCommand(Message& m)

          at System.Windows.Forms.Control.WndProc(Message& m)

          at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

          at System.Windows.Forms.ContainerControl.WndProc(Message& m)

          at System.Windows.Forms.Form.WndProc(Message& m)

          at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

          at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

          at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

          at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)

          at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)

          at System.Windows.Forms.Control.DefWndProc(Message& m)

          at System.Windows.Forms.Control.WmCommand(Message& m)

          at System.Windows.Forms.Control.WndProc(Message& m)

          at System.Windows.Forms.ComboBox.WndProc(Message& m)

          at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

          at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

          at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

          at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)

          at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)

          at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

          at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

          at System.Windows.Forms.Application.Run(Form mainForm)

          at ValidationQuickStart.Program.Main() in C:\EntLib3Src\Quick Starts\Validation\CS\ValidationQuickStart\Program.cs:line 28

          at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)

          at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

          at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

          at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

          at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

          at System.Threading.ThreadHelper.ThreadStart()

    Any ideas on how to get round this, as we were looking to use the VAB in a WinForms application we are currently developing.

    Also when editing the config, I noticed that the messageTemplate would be lost for a Property Comparison Validator. If I manually added it to the config it would be okay, but if I used the editor it would lose the value.

  • Thanks Tom!

    I was also to fix my problem with the fix provided by Alex.  The installer setup the shortcut as follows:

    "C:\Program Files\Common Files\Microsoft Shared\Help 8\dexplore.exe"  /helpcol ms-help://MS.VSCC.v80/MS.VSIPCC.v80/ms.EntLib.2007Apr /LaunchFKeywordTopic EnterpriseLibrary2007Apr.Introduction /filter "Enterprise Library 3.0 - April 2007" (dexplore does exist in that path.)

    I have changed it to:

    "C:\Program Files\Common Files\Microsoft Shared\Help 8\dexplore.exe"  /helpcol ms-help://ms.EntLib.2007Apr /LaunchFKeywordTopic CachingQS1

    Either way, I prefer the CHM for the reasons mentioned earlier, so thanks again!

  • Thanks for the detail Nik. The shortcut we use in the installer does work most of the time, but if the other syntax is more reliable we can switch to that in the future. BTW I expect that the only thing you need to change is the ms-help:// URL - the filters and the launch topics should be fine.


  • Buenas hoy se cumplen 2 años, desde que comencé a escribir un blog. Primero fue en my MSN Live Spaces

Page 4 of 5 (73 items) 12345