Archive

Posts Tagged ‘visual studio’

Microsoft Visual Studio 2010 Release Candidate

February 12th, 2010 No comments

It seems every year life just keeps getting busier :( Anyway, here’s a bit good of news, the Visual Studio 2010 Release Candidate is available for download now. You can also get one chunky ISO if that tickles your fancy.

Compared to Beta 2, its a smooth and quite enjoyable experience and I’m very much waiting for the final. The performance of this release is insanely good and finally fixes some annoying performance issues we noticed in WPF in Beta 2 (lets forget Beta 1).

Don’t forget to try some of the cooler features of .NET 4.0 too.

[Post to Twitter] 

  • Share/Save/Bookmark

jQuery 1.4 released!

January 15th, 2010 No comments

What a way to start the weekend, jQuery 1.4 has been released! There’s so much ubber goodness in this release I nearly fell of my chair! I have yet to muse about but most definately worth a look, the performance boosts are insane!

[Post to Twitter] 

  • Share/Save/Bookmark

Visual Studio 2010 Beta 2 is out!

October 21st, 2009 No comments

Microsoft has just released VisualStudio 2010 Beta 2 to MSDN Subscribers – aka Rosario.

msn_visual_studio_2010

I’m not sure why they’re going with the ULTIMATE moniker for Visual Studio, I still prefer the VS6 style Standard, Professional, Enterprise. Meh.

  • Microsoft Visual Studio 2010 Ultimate with MSDN
    The comprehensive suite of application lifecycle management tools for software teams to ensure quality results from design to deployment.
  • Microsoft Visual Studio 2010 Premium with MSDN
    A complete toolset for developers to deliver scalable, high quality applications.
  • Microsoft Visual Studio 2010 Professional with MSDN
    The essential tool for professional development tasks to assist developers in implementing their ideas easily. (Note: Visual Studio 2010 Professional will also be available without MSDN subscription)

Some of the more exciting things that are coming with Visual Studio 2010 are documented on MSDN or a better one would be Vikas Goyal’s post and also his .NET 4.0 coverage.. Personally the Parallel extensions are the most exciting bits for me. The new Java 7 work is concentrating heavily on concurrency and its good to see both camps pushing the boundaries.

[Post to Twitter] 

  • Share/Save/Bookmark

.NET Tools: NDepend static analysis tool, leave T-Pain behind.

June 1st, 2009 5 comments

The release of Visual Studio 2008 brought along Code Metrics to the IDE’s ‘out-of-the-box’ functionality (I’ve been overusing that phrase thanks to our resident CRM Consultant at work!). This was a major boon for .NET developers to get a clear idea of health of what they write, Visual Studio 2005 gave FxCop integration that provided much needed static code analysis for .NET assemblies. Together these tools provide a peek into the deep depths of the project your working on, it benchmarks the correctness, performance and security implications, localisation, design issues amongst other metrics. Damn useful if you’ve inherited – as I often do in my consultancy life – someone else’s code base with little or no documentation. They say code is the best documentation right? (oh gosh, not one of those projects!)

Whilst both the metrics in VSNET and FxCop give you a low level understanding of your code – based on framework guidelines, what if you want more in depth understanding of what your ‘working with’ rather than how you use the .NET framework? How many methods derive from a certain control – remember we’re doing static analysis here, no Resharper loving! Or how maintainable the assemblies are. What are the methods with more than 30 lines of code? (hint: need to refactor!)

This is where NDepend comes in. NDepend is a static code analysis tool on steroids – and I’m not exaggerating here. You will love NDepend long time as I do right now.

Load up NDepend, point to your assemblies, then let NDepend think a little and it will spit out a plethora of information for you to take in.

The NDepend UI – VisualNDepend

There is however one caveat, the first time you use it – and I know this will happen to the majority of users, you’ll probably get overwhelmed with what you’ll be displayed with:

NDepend Paint.NET Analysis

NDepend Paint.NET Analysis

So you can reproduce this with the trial of NDepend, I’m looking at the latest Paint.NET release. But once you get over your initial sense of wonder and disbelief you can start to demystify the UI and the beauty of NDepend. Dont worry, theres plenty of documentation and help to get you on your way, I’ll cover those later :-)

First, we have a Class Browser to the left that lists all the assemblies that are being anaylsed – this includes the assemblies you selected (black!) and the assemblies that were added automajically by NDepend as dependencies (blue).

To the right of the class browser is our Metrics visual representation (those black balls actually mean something – Marty!). We can tell NDepend to show us (visually via the Code Metrics display) the top 10,20,50-5000 methods. Double click on any item in the view and it will automatically jump to the source (in the working VS.NET instance if available) for you to inspect further. Theres also deep integration with Visual Studio too – again later!

Underneath the Metrics window we have the Dependency Graph on the left and the Dependency Matrix on the right. This view gives us an idea of the coupling between the assemblies in our list.

The World of CQL

Then we have – what makes me get jiggy wif it, the CQL Query window. CQL is Code Query Language, and its just as your thinking, its SQL for Code. Armed with a basic understanding of CQL you can get some really useful information about your project – infact the report that gets generated by NDepend already contains a bunch of metrics for you and comes with over 85 metrics to begin with in a heavily documented specification – with examples. Writing a simple bit of CQL like the one below, will give you a representation of all public methods that contain more than 30 lines of code.

SELECT METHODS WHERE NbLinesOfCode > 30 AND IsPublic

Neat huh? Thats only an example from the features page, there’s lots more. We can even setup a constraint to notify us when we exceed a threshold.

WARN IF Count > 0 IN SELECT METHODS WHERE NbILInstructions > 200 ORDER BY NbILInstructions DESC

This will warn us when we have methods that exceed 200 IL instructions. You can even combine a bunch of them and workout a metric to benchmark which methods you need to refactor, heres one from the report that gets autogenerated by the VisualNDepend tool:

WARN IF Count > 0 IN SELECT TOP 10 METHODS /*OUT OF "YourGeneratedCode" */ WHERE 

                                           // Metrics' definitions
     (  NbLinesOfCode > 30 OR              // http://www.ndepend.com/Metrics.aspx#NbLinesOfCode
        NbILInstructions > 200 OR          // http://www.ndepend.com/Metrics.aspx#NbILInstructions
        CyclomaticComplexity > 20 OR       // http://www.ndepend.com/Metrics.aspx#CC
        ILCyclomaticComplexity > 50 OR     // http://www.ndepend.com/Metrics.aspx#ILCC
        ILNestingDepth > 4 OR              // http://www.ndepend.com/Metrics.aspx#ILNestingDepth
        NbParameters > 5 OR                // http://www.ndepend.com/Metrics.aspx#NbParameters
        NbVariables > 8 OR                 // http://www.ndepend.com/Metrics.aspx#NbVariables
        NbOverloads > 6 )                  // http://www.ndepend.com/Metrics.aspx#NbOverloads
     AND 

     // Here are some ways to avoid taking account of generated methods.
     !( NameIs "InitializeComponent()" OR
        // NDepend.CQL.GeneratedAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll
        // You can define your own attribute to mark "Generated".
        HasAttribute "OPTIONAL:NDepend.CQL.GeneratedAttribute")

Whats more, because NDepend is language neutral you can query any managed assembly. Theres so much goodness you can get from CQL, most of your needs are already documented in the specifications.

Healthy coder == healthy code right?

NDepend also gives us a representation of what state the code is in with the generated report.

Paint.NET Abstractness vs Stability

Paint.NET Abstractness vs Stability

This metric – based on Robert C Martin’s Abstractness vs Stability paper. To quote the paper’s Abstract directly:

This paper describes a set of metrics that can be used  to measure the quality of an object-oriented design in terms of the interdependence between the subsystems  of  that design.   Designs which are highly interdependent tend to be rigid, unreusable and hard to maintain.
Yet interdependence is necessary if the subsystems of  the design are to collaborate.  Thus, some forms of dependency must be desirable,
and other forms must be undesirable.   This paper proposes a design pattern in which all the dependencies are of the desirable form. Finally, this paper describes a set of  metrics that measure the conformance of a design to the desirable pattern.

In the case of Paint.NET we can see that we’re all over the bottom corner of the image. What does this mean?

First we have the two ends of the scale.

  • Y – Abstractness
    This measures how abstract the assembly is, can it be extended without recompiling? Lots of interfaces and base classes help here.
  • X – Instability
    Measures how much this assembly is utilised by its public interface. For most third party component (from vendors) they’ll fall into the less instability area, so you have to ensure that any changes are properly managed to avoid breaking clients.

Then we have two zones.

  • Zone of uselessness
    This is when an assembly is very abstract and extensible but no-one uses it you’ll find it closer to this area.
  • Zone of Pain
    This is when an assembly is referenced (or have lots of dependants) and is not very extensible – no abstract implementations.

One thing to note though, the words ‘Pain’ and ‘Uselessness’ may be a bit harsh in its wording. If you – like me – have a core ‘framework’ that you write have it locked down and reference it muliple projects then they should indeed fall into the ‘Zone of Pain’ assuming that you have ensured its stability and realise the consequences of breakages later on. Most third party products will fall into here – we’re talking your UI Controls, Sharp components etc.

Ideally you’d want to be hovering in the green area cosey with the line in the middle for your core product.

Would you like Documentation with that?

As mentioned earlier, NDepend comes with lots of help, firstly we have – what I used, the Getting Started screencasts, tutorials, CQL Documentation with *actual* usable examples.

Scott Hanselman has also released a nice cheatsheet for NDepend that will go well hanging next to your PC.

Integrating NDepend to Integration Server

At home (and at work) we use Jetbrains TeamCity, you can easily integrate NDepend into TeamCity by following Laurent Kempé directions.

If you use CruiseControl.NET, you’ll find Robin Curry’s guide on integrating NDepend to NAnt and CruiseControl.NET useful.

Integration with your favourite tools

NDepend fully integrates with Visual Studio and Reflector.

NDepend Options Integration

NDepend Options Integration

The integration in Reflector – which reflect that of Visual Studio integration.

NDepend Reflector Integration

NDepend Reflector Integration

Gives you one click access to some common metrics.

Conclusion

If you want to get a good understanding of your project – or someone elses, metrics will help you greatly to give you an impression of the health of the project and NDepend will come in quite handy for you. We only _barely_ scratched the surface with this blog post, I’ve spent a good chuck of a week using NDepend and find it ubber useful in my work life – partly because it involves reparing the mess others have left – but it also serves as a good reminder of how you should write code.

References

Fine Print: Full Disclosure

I was offered a license to NDepend by Patrick Smacchia and given the chance to write my thoughts on this product, I was not paid to review this product – feel free to send some moola if you want to though ;-)

[Post to Twitter] 

  • Share/Save/Bookmark

Hot Booty: Visual Studio 2010 Beta Launches!

May 19th, 2009 No comments

Quick note from Somasegars blog that Visual Studio 2010 Beta 1 along with .NET Framework 4.0 Beta 1 is shipping. Take a look at the Visual Studio 2010 Home Page for more information or if you have MSDN grab it from your subscriber downloads.


[Post to Twitter] 

  • Share/Save/Bookmark

Hot Butter: Slipstreaming SQL Server 2008 with SP1 and an easier FIX for Rule “Previous releases of Microsoft Visual Studio 2008? failed.

April 16th, 2009 No comments

We just did a hardware upgrade of one of our SQL Server boxes during the Easter break. With SP1 for SQL Server 2008 available I followed the excellent instructions from Peter Saddow to slipstream SP1 into the SQL 2008 ISO. Highly recommend you follow the guide :-)

Whilst on the topic of SQL Server 2008, if you were recieving the following – as documented in this earlier post:

Rule “Previous releases of Microsoft Visual Studio 2008? failed.
A previous release of Microsoft Visual Studio 2008 is installed on this computer. Upgrade Microsoft Visual Studio 2008 to the SP1 before installing SQL Server 2008.

You’ll be happy to know that Peter has found a far easier solution than what I gave back then – I can’t work without SQL Server Management Studio. Simply install with the command line below to avoid the MSI Rule checks:

$ Setup /ACTION=install /SkipRules=VSShellInstalledRule

Genius!

[Post to Twitter] 

  • Share/Save/Bookmark

Give me the Greenlight: Resharper 4.5 Released!!!

April 9th, 2009 No comments

I’m ready to go right now,
I’m ready to go right now.

I see you move, I’m checking your smile
working your back like it’s going out of style
Shake just a little bit faster
shake just a little now girl
Dying to meet you, so lets mess around
I’ve got an obsession of us getting down
Come just a little bit closer
I just need permission so just…

Download Resharper 4.5, the final just got released :)

What the hell have I been smoking? Greenlight (feat. Andre 3000) .

[Post to Twitter] 

  • Share/Save/Bookmark

NAnt: Signing Satelite Assemblies Fix

September 4th, 2008 No comments

I’ve been using NAnt to build our source trees at work (via TeamCity ) and came across a somewhat annoying issue when it comes to signing satellite assemblies.

Problem Background

For several of the projects we use the CSLA framework by Rockford Lhotka, the framework doesn’t ship a redistributable binary blob. When it gets built it generates the following:

total 644K
   0 .
   0 ..
   0 /ca-ES
   0 /da
   0 /de
   0 /es
   0 /es-ES
   0 /fr
   0 /hr
   0 /it
   0 /nl
   0 /no
   0 /pt
   0 /pt-br
   0 /ro
   0 /ru
   0 /sr
   0 /sv
   0 /zh-CHS
 16K Csla.XmlSerializers.dll
156K Csla.dll
4.0K Csla.dll.config
468K Csla.pdb

Inside each of those folders we have the resources for the locale (a Csla.Resources.dll satelite assembly). The NAnt Script uses the KeyFile attribute in the CSC task passing in the CslaKey.snk file to sign the main assembly but it appears the NAnt engine (as of NAnt 0.85) does not pass this key to the Assembly Linker (AL.exe) utility to sign the satelite assembly.

Preliminary Solution

So the easiest way to get around this is to specify in the AssemblyInfo.cs file itself the key file to utilise when signing the assembly. This way the compiler will delegate the key to the child utilties it uses enforcing the key signing process.

[assembly: AssemblyCopyright("Copyright © 2007 Rockford Lhotka")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyKeyFile(@"..\CslaKey.snk")]

// Mark the assembly as CLS compliant
[assembly: System.CLSCompliant(true)]

Hopefully this will be addressed in a future release of NAnt.

[Post to Twitter] 

  • Share/Save/Bookmark

Visual Studio 2008 Service Pack 1 & .NET Framework 3.5 SP1 Released!

August 12th, 2008 No comments

Finally after a long wait Microsoft have just RTM’d Visual Studio 2008 Service Pack 1 weighing in at a hefty 851Mb (ISO). The update also includes fixes for .NET Framework 3.5, which brings some cool new features to the table.

Visual Studio 2008 SP1 delivers:

  • Improved WPF designers
  • SQL Server 2008 support
  • ADO.NET Entity Designer
  • Visual Basic and Visual C++ components and tools (including an MFC-based Office 2007 style ‘Ribbon’)
  • Visual Studio Team System Team Foundation Server (TFS) addresses customer feedback on version control usability and performance, email integration with work item tracking and full support for hosting on SQL Server 2008
  • Richer JavaScript support, enhanced AJAX and data tools, and Web site deployment improvements

The .NET Framework 3.5 SP1 delivers:

  • Performance increases between 20-45% for WPF-based applications – without having to change any code
  • WCF improvements that give developers more control over the way they access data and services
  • Streamlined installation experience for client applications
  • Improvements in the area of data platform, such as the ADO.NET Entity Framework, ADO.NET Data Services and support for SQL Server 2008’s new features

This effectively means the previous workaround for those who couldnt wait for SQL Server 2008 installation is redundant now that you can download a copy the final release!!! Yay for us!

If your like me and got down and dirty with pre-releases you’ll have to use the Microsoft Visual Studio .NET 2008 Hotfix Cleanup Utility first followed by the VS2008 Preparation Tool and try the installation.

[Post to Twitter] 

  • Share/Save/Bookmark

FIX: Rule “Previous releases of Microsoft Visual Studio 2008″ failed.

August 10th, 2008 37 comments

Far easier solution is given by Paul in the comments section, highly recommended you follow his suggestion.

As you may be aware, Microsoft RTM’d SQL Server 2008 a few days ago, unfortunately if you have the RTM version of Visual Studio 2008 (any edition) installed you’ll find that installing SQL Server 2008 you’ll get a nasty little surprise:

Rule “Previous releases of Microsoft Visual Studio 2008″ failed.
A previous release of Microsoft Visual Studio 2008 is installed on this computer. Upgrade Microsoft Visual Studio 2008 to the SP1 before installing SQL Server 2008.

This is all explained in the KB956139 – Visual Studio 2008 SP1 may be required for SQL Server 2008 installations, there is however a fix or a workaround to installing SQL Server without the need for SP1 if you aren’t able to obtain it.

Simply customise the installer so that these components aren’t installed:

  • Management Tools
  • Integration Services
  • Business Intelligence Development Studio

Then things will chug along nicely:-)

You can download it on MSDN Subscriber Downloads or the TechNet Subscriber Downloads section. Dont forget to checkout What’s New in SQL Server 2008.

[Post to Twitter] 

  • Share/Save/Bookmark