Infovark Underground

  • news
    • infoblog
    • underground
  • product
  • download
  • buy
  • support
  • about
  • Visual Studio

    • 3 Useful Visual Studio Tricks for Spark Templates

      05 Jan 2010 by Dean / 5 Comments

      We demonstrate three tricks to improve the Spark template editing experience in Visual Studio 2008. This includes HTML syntax highlighting, Spark file icons, and Visual Studio item templates for Spark views.

      Continue Reading

    • Visual Studio 2008 and the CopyLocal setting

      09 Sep 2009 by Dean / 11 Comments

      Though the Microsoft marketing drums have begun beating to the rhythm of Visual Studio 2010, most of us workaday code monkeys are still using Visual Studio 2008. And while VS 2008 is a great IDE for development — especially once you add ReSharper — it has a few configuration quirks that drive me up the wall.

      Most of these quirks are hidden from the typical developer and only appear once you try to package and deploy your software. It’s the dreaded Works on My Machine syndrome.

      And if there’s one Visual Studio build configuration setting that causes me to scream in anguish, it’s the CopyLocal property.

      Feel my pain

      When you add a reference to another .dll in Visual Studio 2008, some default settings get applied.

      The CopyLocal setting on the reference properties panel.

      The CopyLocal setting on the reference properties panel.

      Here’s how the settings look after I added log4net to one of my projects. As you can see, the CopyLocal setting is set to True. Or is it?

      If you move your solution to your build server, you might be surprised to find that CopyLocal isn’t actually copying the .dll. I was certainly surprised to find that my builds failing for inexplicable reasons.

      It took me a while to figure out that Visual Studio 2008 is a dirty liar when it comes to CopyLocal. Let’s have a look at our .csproj file, shall we? You can load the XML in the .csproj file by following these directions.

      Ah, there’s the contents of our csproj file. And there’s our reference to log4net, but…

      Where's the CopyLocal setting?

      Where's the CopyLocal setting?

      The CopyLocal setting isn’t there! Within the log4net reference, we should see an XML element called Private. It should look like this:

      1. <Private>True</Private>

      But it’s clearly not there. Uh oh.

      And because it’s not there, it might work on your machine but not on other machines. Even though the Visual Studio IDE represents CopyLocal as a Boolean value, it’s actually a ternary value. Where Booleans have two states, usually represented as True/False, Yes/No, or 1/0 pairs, ternary logic has three states:

      • True
      • False
      • Um… uh… Other?

      Yikes! That’s a classic interface failure mode.

      It turns out that the default for the CopyLocal setting is… something not quite True and not quite False. If you read the documentation for how to set the CopyLocal property, it mentions the weird logic Visual Studio uses to determine what the “default” should be. Argh.

      Manual repairs

      To fix the problem, we reload our project in Visual Studio again. Then we toggle the CopyLocal setting from “not quite True, exactly” to “False” and then back to “totally, literally True”.

      With apologies to the Violent Femmes, when I say CopyLocal, you best CopyLocal, motherf***er!!!

      And now it’s really, truly TRUE. Honest. Take a look at our .csproj file now.

      This is how CopyLocal=True ought to look.

      This is how CopyLocal=True ought to look.

      And there it is, the CopyLocal setting. The way it should be. The way it should have been all along.

      Conclusion

      I don’t know whether Visual Studio 2010 fixes this problem. I haven’t looked at the VS 2010 Beta release to find out. I’m too busy manually editing all my .csproj files to get our Infovark builds working. But I really, really, really hope that the folks at Microsoft have done something to address the problem.

      Here’s the simple interface design rule: If it isn’t a Boolean setting, it shouldn’t look like a Boolean setting.

      Unless of course, you want to make the pages of The Daily WTF.

      Continue Reading

    • Visual Studio 2008 and its CopyLocal setting

      31 Mar 2009 by Dean / No Comments

      Our build server wasn’t producing the same results as our local development machines. The same C# code yielded two different sets of code libraries. After much head-banging and hand-wringing, we finally traced the problem to an obscure error in the way Visual Studio 2008 handles .csproj files.

      Basically, the Visual Studio IDE doesn’t handle the CopyLocal setting properly. This post from paraesthesia set us on the right track.

      I have no idea what caused the problem. We had the same versions of the .NET Framework and Visual Studio 2008 installed on all our machines. The code was exactly the same. Apart from the build machine being Windows Server 2003 and out development machines being Windows XP, I can’t think of any other differences. But somehow the code libraries weren’t getting copied in the same way.

      Just another adventure on our way toward the Beta release…

      Continue Reading

    • How to avoid Visual Studio Help

      28 Jul 2008 by Gordon / 1 Comment

      For what seems like the thirteen-thousandth time, I just accidentally pushed the F1 key while I was writing some code. It’s pretty close to the escape key. I didn’t mean to push it. I guess I just have fat fingers.

      I really, really hate pressing F1 in Visual Studio. Usually, it takes about a minute to display Microsoft’s help documentation thingy, which is impossible to navigate, frequently wrong and and generally not very helpful. This afternoon, the document explorer decided it had to go and update itself, which took about five minutes before it could take it’s usual minute to load the non-relevant, non-help, that I didn’t even want in the first place!

      During this time, Visual Studio was COMPLETELY Unusable. The help dialog blocks the main visual studio  thread – and all attempts to get back to work were greeted with a friendly, informative “This may take several minutes” dialog.

      Time Passes…
      Time Passes…
      Time Passes…

      Arggh! Gord Mad!… And it turns out it’s not just me. This annoys other folks, too!

      Right. That’s it Visual Studio. You’ve made me go through this song and dance for THE LAST TIME!

      For starters, where do we all go for help? To Google, that’s where. So, I added an external tool using the Tools>External Tools Method:

      Adding an External Tool

      I set up my command to point to Firefox, and passed as the arguments:

      http://www.google.com/search?site=&hl=en&q=$(CurText)+c%23&

      (The +c%23& part of the command appends “C#” to whatever is highlighted in the IDE. If you’re not using C#, you could leave it out, or substitute it with whatever else you usually search for)

      Then, I flipped over to the Keyboard bindings screen (Tools > Options > Keyboard:)

      VS 2008 Keybinding

      VS 2008 Keyboard Binding Screen

      And I re-mapped the F1 key to my new ExternalCommand1.

      There! Now, whenever I press F1, Visual Studio opens a new tab on my web browser, and searches Google for whatever I have highlighted in the IDE.

      Purposefully punishing developers with a minute or two wait everytime they press a certain key is just plain unforgivable. They get really distracted trying to work around the “functionality”, and then further distracted writing ranty blog posts about it…

      Continue Reading

    • Categories

      • .NET (41)
      • AJAX (3)
      • Books (7)
      • HTML (9)
      • Infovark (8)
      • Programming (48)
      • REST (11)
      • SQL (3)
      • Testing (3)
      • Tools (13)
      • UI (3)
      • WCF (11)
      • Web Services (8)
      • WPF (4)
      • XML (4)
    • Archives

    • Get future articles


       

    • Blogroll

      • Ajaxian
      • Anne Van Kesteren
      • Brain.Save()
      • Coding Horror
      • Eric Sink
      • Joel Spolsky
      • John Resig
      • Mark Pilgrim
      • Raymond Chen
      • Scott Hansleman
      • Secret Geek
      • Steve Yegge
      • The Daily WTF
      • The Database Programmer
    • Meta

      • Log in
      • Entries RSS
      • Comments RSS
      • WordPress.org
  • Site map

    • News
    • Product
    • Download
    • Buy
    • Support
    • About
  • Recent Posts

    • Review: Brownfield Application Development in .NET
    • Using Modal Dialogs with a Splash Screen in WPF
    • Highlighting query terms in a WPF TextBlock
    • Getting XAML Hyperlink text to wrap
    • How to format the XAML Hyperlink NavigateUri
  • Twitter

    Copyright 2011 Infovark, Inc. All rights reserved.