Scott Hanselman

Windows Azure - No Kidding

June 7, '12 Comments [51] Posted in Azure | Open Source
Sponsored By
Last year when ScottGu moved over to the Azure group and brought the ASP.NET and IIS teams with him, I'll be frank, I wasn't a fan. I didn't really appreciate Azure or its first iteration. The management portal was obtuse and confusing to use, the service was primarily a PAAS (Platform as a Service) offering and focused on (I thought) confusing terms like Cloud Services and slow deployments. The underlying infrastructure was strong but the developer experience didn't feel "right" to me. I really wasn't feeling it.

So I continued to work on ASP.NET and Visual Studio 2012 and the things that were interesting to me. Then, some months ago Scott and some folks showed us the concepts for the new experience and the new management stuff. It clicked. I saw that Scott and his team "gets" it. I started working with it, giving feedback and filing bugs. We had weekly full-day long team app-building sessions. One particular day I sent 52 different pieces of feedback to the Portal team.

I've talked before about how sometimes development on a platform can be "death by a thousand tiny cuts." It doesn't hurt in general but the little things poke at you. That's not the case with Windows Azure and this release. I'm not embarrassed to say I work for the Azure Team now, as it is pretty darned sweet.

Check out Scott's post but I'll mention a few things that are new just to make the point for you that Azure is something you'll want to check out now.

New Administration Portal and Tools

The management portal has been completely redone with a focus on usability and speed. It works on all browsers but the best part is that it's actually using a REST-based management API so anything you can do on the portal you can do from the API.

There are command line tools to talk to the REST API so you can automate anything you like from both PowerShell on Windows or Bash on Mac and Linux. If you go to the Downloads page on the Azure site you can get .NET, node.js, PHP, Java or Python tools for Windows, Mac and Linux.

Just to make the point, I'll use my Mac and download the Mac SDK on a fresh system. You can do anything from the command line be it in PowerShell or Bash. If I'm on Linux and I have npm, I can just

sudo npm install azure -g

And there's lots of stuff to explore.

The Azure Command Line on a Mac

Freaked out yet? You should be. ;) The Azure SDK is also open source under Apache 2 and available on GitHub.

Azure SDK on a Mac

After the install is done I'm sent to a "what's next" page that shows me how to get node, PHP or Python running (Given that I'm on a Mac). I'll install node.js and git, then I'll make a node.js application on Azure on my Mac.

Now, my point isn't about node nor is it about Macs. It's about choice and it's about the ability to build what you want the way you want it with the tools that make you happy.

I'll make a Web Site...

Creating a node application for Azure

Then I'll setup a git repository along with a name and password for deployment.

My git repository is ready

I'll make a folder, put an app.js in there, initialize the git repo, add "Azure" as a remote repo, and then push. The Azure management site actually notices the push and automatically refreshes without me having to do anything.

I just deployed my node app with git to Windows Azure

Boom, website in the cloud, easy as it should be.

image

Check out the YouTube video I did (embedded above also) on how to do the same thing with .NET and Visual Studio. You can use Web Deploy as I do in the video, Git, TFS or FTP. For example, I can use TFS and do Continuous Deployment if I like.

Virtual Machines

Azure has durable Virtual Machines (VMs) in the cloud now as well. You can make your own image and upload it or you can use a gallery of images that includes not only Windows but also Ubuntu, CentOS and SUSE images.

Linux on Azure. It's freaking me out.

Web Sites

You can make a web site in Azure yourself in a minute. You can make up to 10 small websites for free to play and experiment and then later reserve instances and scale up.

NOTE: To start using Preview Features like Virtual Network and Web Sites, request access on the 'Preview Features' page under the 'account' tab, after you log into your Windows Azure account. Don't have an account?  Sign-up for a free trial here.

Maybe go try one out and create a new Web Site from the Gallery:

You can make a website quickly from the gallery

Feel free to publish in a number of ways as I mentioned, using Web Deploy, TFS, Git or FTP. You can manage everything in the portal or you can automate stuff from the command line.

I like that I have real choice. Use whatever tools I like, whatever OS I like to publish whatever apps I like talking to the backend that I like. I'm personally really happy with the way things are going and I'm looking forward to building all sorts of things with all sorts of tools on Azure.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

ASP.NET for Mobile, One ASP.NET and Realtime ASP.NET with Signalr - Video of Scott Hanselman's talks in Russia

June 5, '12 Comments [24] Posted in ASP.NET | ASP.NET MVC | Javascript | SignalR | Speaking
Sponsored By

Hey that says Scott Hanselman in Russian!I was outside Moscow last week speaking at Microsoft DevCon 12 in Russia. They did a great job with the event and not only filmed everything but did picture in picture as well as real-time translation into Russian. It was also live streamed at the team and later edited for download. Very cool. Big thanks to the team for putting the videos up so fast!

The English versions of my three talks (plus one open Q&A sesssion) are now all up for your viewing pleasure. If it seems I'm speaking ever so slightly slower than usual, that was at the request of the translators, and is a good practice when speaking English to non-native speakers.

You can also download and view the Russian versions if you like as well.

ASP.NET for Mobile Phones and Tablets

The ASP.NET for Mobile Phones and Tablets video

Download links:

SignalR and the Realtime Web

The SignalR and the Realtime Web video

Many problems, many solutions: One ASP.NET

The Many problems, many solutions: One ASP.NET keynote video

Open question and answer session – Ask Scott Hanselman

The Open question and answer session – Ask Scott Hanselman video

Hope you enjoy them!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Visual Studio 2012 RC is released - The Big Web Rollup

May 31, '12 Comments [124] Posted in ASP.NET | ASP.NET MVC | Open Source | VS2012
Sponsored By

Today Visual Studio 2012 RC (Release Candidate) came out. (It's 2012, so 11 make less sense than 2010+2) There's a lot of nice improvements for Web Development in this release candidate as we march towards a final release. Here's some of my favorite new features from the "Angle Brackets Team." That's my name for the Web Platform and Tools team. I hope it sticks.

Web Optimization

There's been some significant changes to the web optimization (minification and bundling) framework since beta. There wasn't enough control over what was bundled and in what order in the beta, so that's been moved into a BundleConfig.cs (or .vb) where you have total control, but everything just works out of the box. The API has been simplified and is slightly more fluent which means it's easier to read and easier to write.

Rendering bundles in Beta required some goofy syntax and a lot of repetitive namespaces. In RC it's nice and simple:

@Styles.Render("~/Content/themes/base/css")
@Scripts.Render("~/Scripts/js")

And you can change with a params array:

@Styles.Render("~/Content/themes/base/css", "~/Content/css")

Also, bundles aren't bundled when you're in debug mode but are when released without you having to change your markup. The regular compilation flag in web.config controls it and you can certainly override with the BundleTable.EnableOptmizations property if you have specific needs.

The best part is that you can plug in custom libraries. If you don't like the included minification technique or perhaps want to add your own, you can. Howard and the team showed me this small example to add support for LESS files and turn them into CSS as a transform, then minify the results.

public class LessTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
response.Content = dotless.Core.Less.Parse(response.Content);
response.ContentType = "text/css";
}
}

Then bundle up the *.less files and transform them as you like.

var lessBundle = new Bundle("~/My/Less").IncludeDirectory("~/My", "*.less");
lessBundle.Transforms.Add(new LessTransform());
lessBundle.Transforms.Add(new CssMinify());
bundles.Add(lessBundle);

Templates and more

Having good Templates is very important and we'll have even more additions and improvements to templates between now and the final release. Also, because the Web Team has externalized the templates (the web templates themselves are extensions that can be updated out of band) you can expect cool and useful updates even beyond the final release. The Web tends to move fast and we'd like to move fast as well.

There's an Empty template introduced for ASP.NET MVC. Like really empty. Folks asked for it! The markup is cleaner in all templates and as before, is HTML5 by default.

The ASP.NET Web Forms template includes support for the Web Optimization framework as mentioned above. ASP.NET Web Forms (like it or not, haters! ;) ) continues to share features with ASP.NET MVC because, as I've said before, it's all One ASP.NET. That means Routing, Providers, Model Binding, HTML5 support, Web Optimization and more are all features you can count on. They are part of ASP.NET no matter which framework you're choosing to use.

Web API now includes scaffolding support (and Web Forms will soon as well) so you can easily make a CRUD (Create, Read, Update, Delete) API from your model. As with all scaffolding, you can customize it as you like.

Web API has Scaffolding too!

I also like that we're shipping Modernizr, Knockout, jQuery, jQuery validation and jQuery Mobile in our templates and you can bring it hundreds more with NuGet as you like.

Tiny Happy Features for Front End Web Developers

Take note, front end people. The team has looked at the complete experience from File | New Project, through development and debugging and tried to (and continues to tyy to) improve the "tiny cuts" that hurt you when developing web apps. Big new features are fun, but sometimes little features that fit into the middle of your workflow make life better and smooth the way. I like tiny happy features.

If you pull the Debug menu down you'll see it finds all your browsers so you can not only use the one you like without hunting but also change your default quickly. Plus, they've added a Browse With menu to this pull down so ASP.NET MVC folks don't have to go digging for it in right-click context menus.

The debug dropdown now include a Browse With option

If you select Browse With it'll bring up this familiar dialog. Now, try Ctrl-clicking on multiple browsers and click Browse.

Browse With supports multiple selection

The toolbar will change so now you can startup more than one browser with one click, with with F5 or Ctrl-F5.

Multiple Browsers is a choice now for launching your app

When you click it, you can select a specific browser for step-through debugging, then the other browser will launch as well.

Pick a browser for debugging

This is a small, but happy feature that I appreciate.

CSS, JavaScript, and HTML Editor Improvements

Dozens and dozens of improvements and new "smarts" have gone into the CSS, JavaScript and HTML editors. For example, the HTML editor is updated with the latest HTML5 intellisense and validation based on the latest W3C standards. All the attributes and tags that you want are there.

aria and data attributes are available

If I type a hyphen (dash) in the CSS editor I get a smart list of all the vendor specific prefixes, even Opera! These lists include help text as well for properties which was no small amount of work.

We love you Opera, honest.

There's drop-downs and pickers for fonts and colors (my favorite) as well as a color picker.

That's a color picker, my friend

These are just a few bits of polish. There's lots of new snippets and expansions as well.

Publishing

Be sure to sign up for the 6/7 Meet Windows Azure event with Scott Gu online to see some VERY cool improvements to publishing in Visual Studio. Before then, you can check out new features for Publishing like:

  • Updated cleaner and simpler publish UI
  • Running EF Code First migrations on the publish dialog
  • Incremental database schema publish and preview
  • Update connection strings in web.config on publish (including complex EF connection strings)
  • Prompting for untrusted certificates on publish dialog during publish
  • Automatically convert VS2010 publish profiles to the new VS2012 format
  • You can easily publish from the command line using a publish profile:
    • msbuild mywap.csproj /p:DeployOnBuild=true;PublishProfile=MyProfileName
  • You can also create profile specific transforms, i.e. web.Production.config, but we haven’t updated the tooling yet to create these. In this case if you have a profile specific transform we will execute the build config one first and then the profile one.

ASP.NET and ASP.NET Web Forms

In addition to the new features I've talked about before like Model Binding and better HTML5 support there's:

  • Updates to assist in async ASP.NET development:
    • HttpResponse.ClientDisconnectedToken: A CancellationToken that asynchronously notifies the application when a client has disconnected from the underlying web server.
    • HttpRequest.TimedOutToken: A CancellationToken that asynchronously notifies the application when a request has run longer than the configured request timeout value.
    • HttpContext.ThreadAbortOnTimeout: Allows applications to control the behavior of timed out requests. Defaults to true. When set to false ASP.NET will not Thread Abort the request but rather leave it to the application to end the request.
    • Protection against race conditions and deadlocks that can be introduced by starting async work at invalid times in the request pipeline
  • Added ability for applications to forcibly terminate the underlying TCP connection of a request via HttpRequest.Abort()
  • Improved support for async in Web Forms including support for async page & control event handlers
  • ScriptManager support for the new ASP.NET bundling & minification library
  • Improvements for extending the Web Forms compilation system:
    • New ControlBuilderInterceptor class to enable customization of the Web Forms page & control compilation output
    • TemplateParser.ParseTemplate method that allows the application to generate an ITemplate instance from a string of ASPX markup
  • Support for Entity Framework enums and spatial data types in Dynamic Data

ASP.NET Web API and MVC

Both ASP.NET MVC and ASP.NET Web API have had a number of improvements since Beta.

  • We now use and support the open source Json.NET serializer for handling of JSON data.
  • You now can easily build custom help and test pages for your web APIs by using the new IApiExplorer service to get a complete runtime description of your web APIs.
  • ASP.NET Web API now provides light weight tracing infrastructure that makes it easy to integrate with existing logging solutions such as System.Diagnostics, ETW and third party logging frameworks. You can enable tracing by providing an ITraceWriter implementation and adding it to your web API configuration.
  • Use the ASP.NET Web API UrlHelper to generate links to related resources in the same application.
  • ASP.NET Web API provides better support for IoC containers through an improved dependency resolver abstraction
  • Use the Add Controller dialog to quickly scaffold a web API controller based on an Entity Framework based model type.
  • Create a unit test project along with your Web API project to get started quickly writing unit tests for your Web API functionality.
  • EF 5 database migrations included out of the box in the ASP.NET MVC 4 Basic Template
  • Add Controller to any project folder
  • Bundling and minification built in
  • The configuration logic For MVC applications has been moved from Global.asax.cs to a set of static classes in the App_Start directory. Routes are registered in RouteConfig.cs. Global MVC filters are registered in FilterConfig.cs. Bundling and minification configuration now lives in BundleConfig.cs.

Visual Studio Theme

Ah, the controversial theme change. They've added a bunch of splashes of color, brightened the background and made the status bar change color depending on your status. I'm not sure what I think about the ALL CAPS menus but I honestly don't look at them much. They seem to be the last thing that folks are freaking out about. My guess (I am NOT a designer) is that there's an implied horizontal rule along the top edge of the letters and if you used mixed case they'd just be floating words. We'll see what happens, maybe it'll be a option to change, maybe not. I'm more worried about the web functionality than the look of the menus. I think the RC looks way way better than the initial Beta, myself, and I understand there are more changes coming as well as clearer icons in the dark theme for the final release. You can read more and look at side by side examples and decide for yourself at the Visual Studio Blog. It's growing on me.

Visual Studio Light Theme

I've even tried out the Dark Theme along with Rob's Wekeroad Ink theme from http://studiostyl.es. While I'm not sure if I'm ready to fully make the dark theme switch, it's pretty nice.

My Visual Studio Dark Theme

Other non-Webby Features

Some other features and cool things of note to me (there are lots more than this) are:

  • Customization is back to make for a smaller installation.
  • Install the RC directly over the Beta. No need to uninstall. Whew!
  • Windows Vista support for .NET Framework 4.5
  • XAML compiler incremental builds in Metro apps is now twice as fast as beta.
  • Go-Live license, which means you can publish apps live today and get support if you need it.

Obscure Gotchas and Known Issues

Be sure to go through the readme to make sure that there aren't known issues that might mess you up. As with all pre-release software, be careful. Test things and don't blindly install on systems you care about. I'm installing this "on the metal" but I'm keeping a Visual Studio 2010 SP1 virtual machine around just in case something obscure is discovered.

One gotcha that I know of so far for those of you who are totally riding the beta train. If you install Visual Studio 2012 RC on Windows 8 Release Preview and are trying to get an ASP.NET 3.5 (that's 3.5, be aware) application to work, you'll have trouble with IIS Express. You can work around it by installing IIS8 from the Windows 8 Add Features control panel. Just installing IIS8 will fix a bad registry key created by IIS8 Express. This will be fixed in release. Obscure, but worth noting.

Related Links

All The Download Links - including OFFLINE installers inside ISOs

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

She let me take the computer home. - How did you get started in computers and programming?

May 29, '12 Comments [133] Posted in Musings
Sponsored By

Apple 2 - Wikipedia CommonsI like hearing stories about how people got into computers and programming. Perhaps if I blog my story, you'll share yours.

I went to school in NE Portland in a small and diverse but relatively poor elementary school. I remember the first time a computer showed up in class. It was fifth grade - I think I was 11 - and the computer was an Apple ][. There was only the one computer. This was the 80s and these were $2600 machines if you got the full 48Kb of RAM.

Before I discovered computers I was, in fact, a typewriter nerd. Yes, that existed. I took typing class on old manual (not IBM Selectric) typewriters and I was the kid in class that repaired the typewriters. I remember spending hours trying to figure out what each typewriter needed to fix a stuck key or repair a carriage that wouldn't return.

I was also the A/V (Audio/Visual) geek. This basically meant I was the only one in the class (including the teacher, sometimes) who knew how to thread film onto the projector.

Clearly I was wired to tinker from the start. I was always taking apart the toaster or the clock radio. I loved going to Goodwill or the local flea market and buying broken stuff and trying to bring it back to live. This continues today. Just this weekend my 4 year old and I bought a small toy walking (broken) robot for $2 at a garage sale and spend the evening taking it apart, cleaning the gears, re setting the mechanism and getting it walking again. Perhaps this is also why I like watches with moving parts and hands and not digital ones. I was analog before I was digital, I suppose.

Anyway, when this Apple ][ showed up, I immediately opened it up. I had to see what was inside. This, of course, totally freaked out the teacher but it seemed pretty clear I wasn't going to break it. We had the usual games like Oregon Trail (no color here folks, this was all green screen) and I quickly learned how to get out of these educational games and write things in BASIC.

Oregon Trail - Photo via The Pug Father on Flickr - Creative Commons
Screenshot: The original Oregon Trail computer game. (Photo credit: The_Pug_Father via Flickr)

This was all in 5th grade and this was when it all started. I blogged about my fifth grade teacher in 2004. She and her husband attended my wedding. We stayed in touch until her passing. She - along with my parents - was absolutely instrumental in keeping me out of trouble. I can say that I honestly don't know what I'd be doing if she hadn't done something extraordinary.

She let me take the computer home.

In clearer terms, she let my parents and I effectively "steal" the computer every Friday night after everyone left as long as we had it back Sunday night and ready for Monday morning.

This was massive, in case that's unclear. She played favorites and made a deal. She singled me out because she knew without focus that I would be trouble. They used to joke that I would be voted "most likely to be convicted of a white-collar crime." This was a $2000+ computer in the middle of the 80s - the pride of the school - and they let me take it home. I can't imagine what would have happened had we broken it.

Each Friday evening my Dad would back his pickup up to the outside door of her class and we would abscond with the Apple ][. I'd spend the weekend programming, reading the massive spiral notebooks of Apple internals and generally staying away from trouble.

A year or so later when it was clear that I had a knack for computers, I came home from school one day and the family car was gone and there was a Commodore 64 left in its place. My Mom and Dad had sold the car and bought a Commodore.

When it's 30 years later and you're hanging with your spouse and perhaps watching your kids play you will find yourself thinking about how this crazy journey happened. I am standing on the shoulders not only of computer science giants, but also unsung heroes like my parents and my 5th grade teacher. I look forward to the time when I will make sacrifices for my kids and the children in my life. I hope I make those decisions as unselfishly as did the adults in my life.

Thank you Mrs. Hill, for introducing me to computers even though you were breaking a half dozen rules to make it happen.

Thanks, Mom and Dad for bringing a computer into our house even when there wasn't money for one.

What's your story?


Sponsor: I want to thank my friends at DevExpress for sponsoring last week's feed. Take a moment and check out their stuff as they are lovely folks. Touch-enabled apps require developers to re-think design & user experiences. DevExpress tools help you take on these new challenges using your existing skills & today’s technologies.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

ASP.NET MVC Beta and RC Upgrades - Confirm your Expectations and Version Numbers in Production Environments

May 22, '12 Comments [18] Posted in ASP.NET | ASP.NET MVC
Sponsored By

I was working on an app locally using a daily build (newer than the currently released one) of ASP.NET MVC and deployed it to a host. I noticed this weird CSS issue. See how the text box on the left running on localhost is small and not styled while the one on the right running on the host is the correct width? You can click on the screenshot if you need to see more.

The Local website's textbox is poorly styled while the same app running the host has a correctly-styled textbox

I dug around a little and using the F12 browser developer tools (as well as good old View Source) I noticed the HTML being created was different! My local app was producing one bit of markup, then when I deployed the same app to my host I would get different markup!

Here's the app's markup running locally:

<input class="text-box single-line" data-val="true" 
data-val-date="The field EventDate must be a date."
data-val-required="The EventDate field is required."
id="EventDate" name="EventDate" type="datetime" value="5/29/2012 1:48:23 AM" />

Here's while running on the host:

<input class="text-box single-line" data-val="true" 
data-val-date="The field EventDate must be a date."
data-val-required="The EventDate field is required."
id="EventDate" name="EventDate" type="text" value="5/29/2012 1:48:23 AM" />

I realize I could have made it more obvious for this but I wanted to make the point that it took a second to notice that my standard ASP.NET MVC Helper call...

<div class="editor-field">
@Html.EditorFor(model => model.EventDate)
@Html.ValidationMessageFor(model => model.EventDate)
</div>

...was returning type="text" on the host but type="datetime" on my local machine and that difference was picked up CSS that targeted specific input tags. Weird. Now, EditorFor() can have its behavior overridden with custom files in ~\Shared\EditorTemplates so if there was a DateTime.cshtml in there that would make sense. There wasn't. I wasn't using the very lovely MvcHtml5Templates NuGet package by Scott Kirkland, so that wasn't it.

My spider-sense was telling me this must be a versioning issue but everything looked right. My only explanation was that somehow what was running on the host was different from what was running on my local machine.

I asked around work and Eilon Lipton suggested I run this snippet to check the version of ASP.NET MVC. He's basically saying "Hey, where did this well known type come from?"

public ActionResult ShowVersion()
{
Type t = null;
try
{
t = Type.GetType("System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35");
}
catch (Exception e)
{
Response.Write("Error finding MVC: " + e.ToString());

}
if (t == null)
{
Response.Write("Can't find MVC");
}
else
{
Response.Write("Found MVC at " + t.Assembly.CodeBase + ", IsInGac = " + t.Assembly.GlobalAssemblyCache + "<br>");
var verAttr = t.Assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), true)[0] as System.Reflection.AssemblyFileVersionAttribute;
Response.Write("Version = " + verAttr.Version + "<br>");

}
return null;
}

Even better, rather than using this code, I can use the MvcDiagnostics NuGet Package and get THIS useful data from Brad Wilson. Hopefully he will update it for ASP.NET MVC 4 although it worked well.

MvcDiagnostics NuGet Package

This package gives you lots of useful information for debugging weird situations.

ASP.NET MVC Diagnostics Utility gives lots of useful data

Anyway, I put the diagnostic code in a controller and ran it and got this (this version is faked):

Found MVC at file:///C:/mysite/bin/System.Web.Mvc.DLL, IsInGac = False
Version = 4.0.77777.0

Hang on, but my local result was this:

Found MVC at file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Web.Mvc/v4.0_4.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll, IsInGac = True
Version = 4.0.99999.0

My local version was newer and was running from the GAC (Global Assembly Cache) but the hosted version was older and running locally. That means I had older ASP.NET MVC files floating around that my project referenced and deployed to the host.

Aside: The specific change that "got" me here was actually the first external contribution accepted to ASP.NET MVC. It's the one that Miguel de Icaza sent a pull request for while I was on stage at DevConnections. The change is to output HTML5 input types for common default data types, like <input type="datetime"> for System.DateTime when using EditorFor().

It took me a moment to remember that I hadn't added the reference to ASP.NET MVC manually but rather via the NuGet Package Manager. This became crystal clear when I used the built-in NuGet Package Visualizer (from Tools | Library Package Manager) to see the package dependency chain:

The ASP.NET NuGet Packages as viewed in a directed graph in the NuGet Package Visualizer

Basically I needed to either update my out of date NuGet packages or add the assembly references manually without NuGet.

Since I was working on a daily build I did it manually. When you update your ASP.NET MVC 4 Beta applications to a newer build (like ASP.NET MVC 4 Release Candidate (whenever that comes out) or the final Release) you'll want to do update all your packages via NuGet and confirm you're getting the versions and behavior you expect. The NuGet Package Visualizer is a hidden gem indeed.

So, a general reminder to folks (and a specific lesson when upgrading between ASP.NET MVC builds):

  • know your version numbers, what you want, what you're referencing.
  • confirm your version numbers in your debug and production environment.
    • Perhaps a health-check page or a runnable Integration Test to assert your assumptions
  • update your NuGet packages keep your references, and thus your ~\bin up to date
  • know where your assemblies are being loaded from (the GAC or locally)

Hope this helps!


Sponsor: I want to thank my friends at DevExpress for sponsoring this week's feed. Take a moment and check out their stuff! Touch-enabled apps require developers to re-think design & user experiences. DevExpress tools help you take on these new challenges using your existing skills & today’s technologies.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.