Showing posts with label visual studio. Show all posts
Showing posts with label visual studio. Show all posts

Friday, January 7, 2011

MSBuild, Visual Studio and 64-bit Windows == Huh?

So this is kind of lame. Let's say you've got a web app in VS on a 64-bit version of Windows. Everything's all good and you decide that instead of building from VS you now want to build the project directly from MSBuild, either by pointing at the .sln file or the .csproj. Should just work, right? Wrong.

Your build will fail with this:
"The imported project "C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" was not found."

You see, there's an element inside of your .csproj that looks like this:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />

This apparently pulls in some additional targets that MSBuild needs to do its thing on web apps. Unfortunately, when running MSBuild from the command line on a 64-bit maching the $(MSBuildExtensionsPath) variable refers to:

C:\Program Files\MSBuild

but the stuff that it's looking for only exists in the 32-bit version of this directory at:

C:\Program Files (x86)\MSBuild\

Let me just say right now that:
1. I have no idea why this isn't an issue when building in VS. I believe it's still using MSBuild to execute, but maybe the variable is being correctly set to the 32-bit program files directory in this case. Or maybe it's running a 32-bit version of MSBuild?!
2. Why this stuff only lives in the 32-bit program files directory. The other directory exists but it only appears to house some WF stuff.

Anyway, I found an MS Connect report (from 2006!) on it but they're claiming that it's "by design" and not a bug. Their proposed work-around is simple, but really lame - copy the files over into the x64 program files directory. Like I said simple, but lame.

Here's the link: http://connect.microsoft.com/VisualStudio/feedback/details/109232/msbuild-msbuildextensionspath-returns-invalid-path-on-x64

I copied the stuff over and it did seem to solve the problem, but we'll see what sort of downstream issues come up later when some installer isn't expecting 32-bit versions of that stuff to be sitting in there...

Not impressed on this one MS.

Add to del.icio.usDiggIt!RedditStumble ThisAdd to Google BookmarksAdd to Yahoo MyWebAdd to Technorati FavesSlashdot it

Wednesday, February 3, 2010

Getting -vsdoc.js VS Intellisense to work (for real)

No time for chit-chat but here's one that I don't really want to re-solve...

VS 2008 has a patch to (supposedly) allow for Intellisense on included JavaScript libraries (assuming a -vsdoc.js version is supplied - for example, jQuery).

The idea is that you include the -vsdoc.js version of the file along-side the actual version of the .js file, like this:


<script type="text/javascript" src="Scripts/jquery-1.3.2.js"></script>
<script type="text/javascript" src="Scripts/jquery-1.3.2-vsdoc.js"></script>


And you magically start getting Intellisense for your .js in VS.

Unfortunately, no magic there for me.

Then I found someone saying that it wasn't working for them either, but this worked:


<% if (false) { %>
<script src="Scripts/jquery-1.3.2-vsdoc.js" type="text/javascript"></script>
<% } %>


...ostensibly because they were "using user controls". Ugh. The approach here is obvious enough and I actually found a bunch more mentions of this issue & technique out there, even though I'm dubious about what this has to do with user controls or where the disconnect with the original, intended functionality of the patch is. Regardless, this didn't work for me either.

I started to think maybe it was because I was doing MVC, or using a master page, or some file path thing, or... Well I started to run out of ideas right about the time I started running out of new Google results, so I just decided to decompose the problem and work it out for myself. I won't re-hash my tedious and meandering thought process here, but I finally got it working by adding the following to the <head> of my master page:


<script src="%3C%%20=Url.Content%28">" type="text/javascript"></script>
<% if (false) { %>
<script type="text/javascript" src="%7E/Scripts/jquery-1.3.2-vsdoc.js"></script>
<% } %>


I know, crazy. VS seems to understand the ~ and correctly resolve the path to the -vsdoc.js file in the editor just fine. Intellisense shows up in the master and all pages that implement it and everyone's happy.

Including me. Although I'd love to know why it's not working the way it's intended. Unfortunately I don't have the time to track it down. If you do, let me know what you find.

Add to del.icio.usDiggIt!RedditStumble ThisAdd to Google BookmarksAdd to Yahoo MyWebAdd to Technorati FavesSlashdot it