Codepolice

Random posts from Ola in English. Mainly about programming and the web.

What I Love So Far With Visual Studio 11

I have used Visual Studio 11 since it was released in beta and i must say i really like it. I wanted to write down my favorite features here both to remind myself about them and to maybe give any of you random readers some tips.

HTML Editor / ASP.Net

  • You can now generate a event handler directly from the design source view. Before you had to go to the design view or use the “tab tab” feature in the code view to auto generate an event handler. Now you can do it from the asp server tag itself.
  • Just as you can extract a method via the refactor context menu in the code editor you can now Extract a user control from the HTML view. So if you have a chunk of HTML that you feel would fit better in a user control you can just select it all, right click on it and choose to extract as a user control. VS will then create the new user control, reference it in the document and insert a tag for it. You have to move any code that reference any of the elements that you extracted manually though.
  • If you change a a HTML tag in VS11 it will now also change the closing tag. It’s strange that this hasn’t been there before but I’m glad they finally added it.

CSS Editor

  • I’m a CTRL K+D junkie and use it all the time to format my code. What bugged the hell out of me before was that in a CSS file the editor always scrolled up to the top of the document when i did this. It doesn’t do that anymore. In relation to this VS11 also intend CSS based on class. So .header h1 will get intended below .header.
  • As much as I use the shortcut to format my document i use CTRL K+C  and CTRL K+U to comment and uncomment my code. This did not work in CSS files before but works now.
  • I use border-radius and some other CSS3 features a lot and since some browsers requires vendor specific prefix for these it’s always a mess to have to write -moz-bla-bla and -webkit-bla-bla and so on. If you type border-radius in the Visual Studio 11 editor and then press tab twice it will automatically create these.

Page Inspector

The Page Inspector they added in Visual Studio 11 is just brilliant! It’s like Firebug but instead of seeing your generated HTML when you inspect elements you see the actual server side code that generates a specific element on your site. And it also works with CSS! No more hacking in Firebug to make something looks good and then remember what you changed and save it in the actual file and so on. As i said, it’s just brilliant! Right click on the project and choose “View in Page Inspector” to use it!

 

Get the Dark Theme for the editor but not for the rest of the UI in Visual Studio 11

I just downloaded the shiny new Visual Studio 11 BETA and haven’t had so much time to use it yet. But one thing i was curious about was the new built-in dark theme they provided. I really liked the Dark Theme for the code editing windows but not so much for the rest of the UI. I solved this by just switch to the dark theme, export the settings, switch back to light theme then import the settings and unchecked everything but the colors & fonts. Worked like a charm! I recorded a video of it below.

Make the Git GUI appear after you publish a Web Project in Visual Studio 2010

A couple of moths ago i started to use GIT as my primary Source Control. To be honest I hadn’t use any “real” source control at all before for this project. I only used a online backup service that had some basic version control on a file to file basis.

But i love GIT. It’s really simple and everything works more or less exactly as you expect it to do. But there isn’t much tools out there that integrates well with Visual Studio. There is Git Extensions for Windows and there is a project called Git Source Control Provider. The problem with Git Extensions is that it doesn’t do that much. It only ads a menu in Visual Studio where you can execute some command. Git Source Control Provider on the other hand looked like the perfect tool for me. But for some reason it didn’t sync correctly with my Git Repository and i got the feeling the project was a bit to immature to be trusted.

I always forget to commit

So, my biggest problem is that I always forget to fire up the command line / GUI and actually commit the changes i do the code. When you use SVN, TFS you get those nice little icons on all the files in Visual Studio so you are constantly reminded of your changes. This was what Git Source Control Provider promised but as i said, didn’t work for me.

I would be happy just to be reminded every time i publish my website to the ftp that “Hey! Don’t forget to commit your changes!”. And just to be clear. This is a solution for a one man shop that don’t really need “continuous integration” and loads of complicated stuff. I like my super simple solution where i just publish my project to my ftp and boom done!

My stupid hack

I found this post on Stack Overflow that explains how to run a MS Build target after you do a publish from Visual Studio. You just have to add this target at the end of your .csproj file. Your publish method must be a “WebDeploy”. I tried with “File System” but that didn’t work. The “WebDeploy” method was much faster anyway.

<Target Name="CustomPostPublishActions" AfterTargets="MSDeployPublish" >
    <Exec Command="&quot;C:\Program Files (x86)\Git\bin\wish.exe&quot; &quot;C:\Program Files (x86)\Git\libexec\git-core\git-gui&quot;" />
</Target>

That’s more or less all there is to it. This will fire up the GIT GUI and your Publish task won’t finish until you close that program. Of course you could probably just run the console instead if you prefer that.

Copy a folder with Robocopy

I’m playing around a bit with PhoneGap at the moment. I wanted to make a script that copies all my javascript, html, images and css from my Visual Studio project folder to each of the diffrent PhoneGap projects for iOS, Android and so on.

Visual Studio has a featured to execute commands after the project is built and it felt like the simplest solution. I tried to add a command like robocopy c:\myproj\css c:\myandroidproj it worked but the thing was that i wanted to copy the folder AND the files in it and i couldn’t figure out how to to that. Maybe I’m just stupid, i don’t know.

Anyway i figured out how to do it in a good way finally.

robocopy $(ProjectDir) C:\Java\MyProj\assets\www\ *.html *.js *.css *.png *.gif *.jpg /S

This will copy all the specified filetype, ignore files like .csproj and stuff like that. The S stands for “Copy directory structure but ignore empty folders”.