<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Manuel Abadia's ASP.NET stuff - Visual Studio</title>
    <link>http://www.manuelabadia.com/blog/</link>
    <description />
    <language>en-us</language>
    <copyright>Manuel Abadia</copyright>
    <lastBuildDate>Tue, 31 Aug 2010 16:27:46 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>blogcomments@manuelabadia.com</managingEditor>
    <webMaster>blogcomments@manuelabadia.com</webMaster>
    <item>
      <trackback:ping>http://www.manuelabadia.com/blog/Trackback.aspx?guid=04ac6c0f-dde0-4960-ba68-d5e8fbf09148</trackback:ping>
      <pingback:server>http://www.manuelabadia.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.manuelabadia.com/blog/PermaLink,guid,04ac6c0f-dde0-4960-ba68-d5e8fbf09148.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.manuelabadia.com/blog/CommentView,guid,04ac6c0f-dde0-4960-ba68-d5e8fbf09148.aspx</wfw:comment>
      <wfw:commentRss>http://www.manuelabadia.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=04ac6c0f-dde0-4960-ba68-d5e8fbf09148</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have finally updated the Linq Expressions DebuggerVisualizer to work in VS 2010.
</p>
        <p>
There were a lot of new kind of Expressions introduced so I added support for them
too.
</p>
        <p>
You can see it in action with data from the MSDN samples for the SwitchExpression
class and the TryExpression class.
</p>
        <p>
          <img border="0" src="http://www.manuelabadia.com/blog/content/binary/linqdebviz1.PNG" />
          <br />
          <img border="0" src="http://www.manuelabadia.com/blog/content/binary/linqdebviz2.PNG" />
          <br />
        </p>
        <p>
You can download the Visualizer <a href="http://www.manuelabadia.com/blog/PermaLink,guid,9160035f-490f-46bd-ab55-516b5c7545af.aspx">here</a></p>
        <img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=04ac6c0f-dde0-4960-ba68-d5e8fbf09148" />
      </body>
      <title>Linq Expressions DebuggerVisualizer updated to work in VS2010</title>
      <guid isPermaLink="false">http://www.manuelabadia.com/blog/PermaLink,guid,04ac6c0f-dde0-4960-ba68-d5e8fbf09148.aspx</guid>
      <link>http://www.manuelabadia.com/blog/PermaLink,guid,04ac6c0f-dde0-4960-ba68-d5e8fbf09148.aspx</link>
      <pubDate>Tue, 31 Aug 2010 16:27:46 GMT</pubDate>
      <description>&lt;p&gt;
I have finally updated the Linq Expressions DebuggerVisualizer to work in VS 2010.
&lt;/p&gt;
&lt;p&gt;
There were a lot of new kind of Expressions introduced so I added support for them
too.
&lt;/p&gt;
&lt;p&gt;
You can see it in action with data from the MSDN samples for the SwitchExpression
class and the TryExpression class.
&lt;/p&gt;
&lt;p&gt;
&lt;img border="0" src="http://www.manuelabadia.com/blog/content/binary/linqdebviz1.PNG"&gt;
&lt;br /&gt;
&lt;img border="0" src="http://www.manuelabadia.com/blog/content/binary/linqdebviz2.PNG"&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
You can download the Visualizer &lt;a href="http://www.manuelabadia.com/blog/PermaLink,guid,9160035f-490f-46bd-ab55-516b5c7545af.aspx"&gt;here&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=04ac6c0f-dde0-4960-ba68-d5e8fbf09148" /&gt;</description>
      <comments>http://www.manuelabadia.com/blog/CommentView,guid,04ac6c0f-dde0-4960-ba68-d5e8fbf09148.aspx</comments>
      <category>Linq;Microsoft .NET Framework;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.manuelabadia.com/blog/Trackback.aspx?guid=870abdd7-ec3d-4760-8513-287151782f1f</trackback:ping>
      <pingback:server>http://www.manuelabadia.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.manuelabadia.com/blog/PermaLink,guid,870abdd7-ec3d-4760-8513-287151782f1f.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.manuelabadia.com/blog/CommentView,guid,870abdd7-ec3d-4760-8513-287151782f1f.aspx</wfw:comment>
      <wfw:commentRss>http://www.manuelabadia.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=870abdd7-ec3d-4760-8513-287151782f1f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some time ago I created a DebuggerVisualizer for LINQ expressions. I have finally
updated the DebuggerVisualizer for Visual Studio 2008 RTM version. You can download
it <a href="http://www.manuelabadia.com/blog/PermaLink,guid,9160035f-490f-46bd-ab55-516b5c7545af.aspx">here</a>.
</p>
        <p>
The main changes are that Funclets and LiftExpressions were removed after Beta 1.
For more information check <a href="http://sgdotnet.org/blogs/chuawenching/archive/2007/09/27/Missing-FuncletExpression-and-LiftExpression-in-Visual-Studio-2008-Beta-2.aspx">this
post</a>.
</p>
        <p>
I have tested it only in a couple of expressions so let me know if you find any problem.
</p>
        <img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=870abdd7-ec3d-4760-8513-287151782f1f" />
      </body>
      <title>LINQ Expressions DebuggerVisualizer Update</title>
      <guid isPermaLink="false">http://www.manuelabadia.com/blog/PermaLink,guid,870abdd7-ec3d-4760-8513-287151782f1f.aspx</guid>
      <link>http://www.manuelabadia.com/blog/PermaLink,guid,870abdd7-ec3d-4760-8513-287151782f1f.aspx</link>
      <pubDate>Sun, 13 Jan 2008 10:08:02 GMT</pubDate>
      <description>&lt;p&gt;
Some time ago I created a DebuggerVisualizer for LINQ expressions. I have finally
updated the DebuggerVisualizer for Visual Studio 2008 RTM version. You can download
it &lt;a href="http://www.manuelabadia.com/blog/PermaLink,guid,9160035f-490f-46bd-ab55-516b5c7545af.aspx"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The main changes are that Funclets and LiftExpressions were removed after Beta 1.
For more information check &lt;a href="http://sgdotnet.org/blogs/chuawenching/archive/2007/09/27/Missing-FuncletExpression-and-LiftExpression-in-Visual-Studio-2008-Beta-2.aspx"&gt;this
post&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I have tested it only in a couple of expressions so let me know if you find any problem.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=870abdd7-ec3d-4760-8513-287151782f1f" /&gt;</description>
      <comments>http://www.manuelabadia.com/blog/CommentView,guid,870abdd7-ec3d-4760-8513-287151782f1f.aspx</comments>
      <category>Linq;Microsoft .NET Framework;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.manuelabadia.com/blog/Trackback.aspx?guid=666afc3a-d84d-4412-af43-da0235210cfa</trackback:ping>
      <pingback:server>http://www.manuelabadia.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.manuelabadia.com/blog/PermaLink,guid,666afc3a-d84d-4412-af43-da0235210cfa.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.manuelabadia.com/blog/CommentView,guid,666afc3a-d84d-4412-af43-da0235210cfa.aspx</wfw:comment>
      <wfw:commentRss>http://www.manuelabadia.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=666afc3a-d84d-4412-af43-da0235210cfa</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the tools I have been using is <a href="http://www.openqa.org/selenium/">Selenium</a>.
Selenium is a test framework for web applications. Selenium is composed of 3 different
projects:
</p>
        <p>
• Selenium Core: A set of cross browser javascript classes that contain the test
framework.<br />
• Selenium IDE: A FireFox plugin that allows creation, recording and editing
of tests for Selenium.<br />
• Selenium RC: A web server and a set of classes to allow integrating Selenium
tests in test applications like MbUnit.
</p>
        <p>
To illustrate the concepts I’m going to use a sample. I have a control called ListControlMediator,
that is used to connect two DropDownList controls in order to move ListItems from
a DropDownList to the other. It can be used to reorder ListItems too. The following
image shows two DropDownLists with a ListControlMediator:
</p>
        <p>
          <img height="284" alt="listcontrolmediator1.png" src="http://www.manuelabadia.com/blog/content/binary/listcontrolmediator1.png" width="632" border="0" />
        </p>
        <p>
The identifier is shown near the controls on the page.
</p>
        <p>
The ListControlMediator can work in server side mode, performing a postback each time
a button is pressed. However, it also has a client side mode that uses javascript
to avoid postbacks. So I want to write some tests to check that the control works
properly in client and server side mode, using IE and FireFox.<br />
 <br />
The first thing will be to create a page to perform the tests, as the one shown above.
The only functionality of the page shown above is the action to perform when the “Send”
button is clicked.  When the “Send” button is clicked, the text of the items
of the ListBox2 is shown in the lResult label (separated with spaces).
</p>
        <p>
The second thing to do is to create a test of the web page. In this step, there are
two main options:
</p>
        <p>
• Create the test by hand.<br />
• Record the test with the Selenium IDE.
</p>
        <p>
I usually record the test with the Selenium IDE and then adjust it a bit. To use the
Selenium IDE just open FireFox and select Tools-&gt;Selenium IDE. Use the record button
to start recording actions:
</p>
        <p>
          <img height="446" alt="selenium_ide1.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_ide1.png" width="647" border="0" />
        </p>
        <p>
For example, after some actions in the page I got the following actions recorded:
</p>
        <p>
          <img height="633" alt="selenium_ide2.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_ide2.png" width="420" border="0" />
        </p>
        <p>
As you can see, an action can have up to 3 attributes: Command, Target and Value.
If you click on an action, you can select a command from the combo box. There are
a lot of commands available, but you can learn them when you need them. The reference
at the bottom of the Selenium IDE shows the help for the selected command, and the
arguments it takes (Target is the first argument and Value is the second argument).
</p>
        <p>
A cool thing about the Selenium IDE is that it adds an option in the FireFox context
menu called “Show All Available Commands”. When you right click in an element of the
page, it will show a list of the most common commands that can be applied to that
element. That is very helpful for newbies.
</p>
        <p>
After a test has been recorded, we can save it to replay it later (using File-&gt;Save
Test). As a test is not more than a list of actions, and an action can have up to
3 attributes, tests are saved as HTML pages with a table. Each row in the table is
an action, and has three columns, one per attribute of the action.
</p>
        <p>
Once you have some tests saved, you can use the Selenium core to test them. Several
tests are grouped in a “Test Suite”. A test suite is also an HTML file with a table,
where each row in the table has only one column, where a link to the test of the suite
is specified.
</p>
        <p>
To use the Selenium core you will have to copy the “core” directory of the selenium
core distribution to the root folder of your website. In the selenium core distribution,
there is also a directory called “tests” where there are a lot of tests of a test
suite. Create a directory called “tests” in the root folder of your website and copy
the TestSuite.html file found in the “tests” directory of the selenium core distribution.
Edit the TestSuite.html file, leaving only a row in the table that points to the test
saved with the Selenium IDE (copy the saved test to the “tests” directory of your
website). Some tests may not work in some browsers, so you can add that information
to the row. For example, if you add unless="browserVersion.isSafari" to some rows
and you try to run the tests using Safari, those tests won’t be executed.
</p>
        <p>
To run a test suite using the Selenium core you have to point the browser to the /core/TestRunner.html
page:
</p>
        <p>
          <img alt="selenium_core1.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_core1.png" border="0" />
        </p>
        <p>
And select the test suite to run on the left. After the test suite has been selected,
the tests contained in the test suite are shown on the left. When you click on a test
the top center part of the browser shows the actions of the selected test. In the
right there are some controls to run the tests. The bottom part of the browser is
where the test will be run:
</p>
        <p>
          <img alt="selenium_core2.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_core2.png" border="0" />
        </p>
        <p>
The TestRunner.html page accept some parameters to select the test suite, run the
test automatically, etc, but the truth is that we use Selenium RC we won’t need to
mess with the TestRunner anymore.
</p>
        <p>
To use Selenium RC for our web tests we don’t need to copy the core or tests from
the Selenium Core distribution.
</p>
        <p>
Selenium Remote Control (RC) is basically a web server and the ThoughtWorks.Selenium.Core.dll
assembly.
</p>
        <p>
The selenium server is used to open browser sessions and is also a proxy. When the
server opens a browser session it configures the browser to use the selenium server
as a proxy. The selenium server injects the test framework for the pages it uses,
capturing all requests to /selenium-server/ so they return stuff from the Selenium
Core, making the page under test to be able to use the Selenium Core transparently
without Javascript origin policy problems.
</p>
        <p>
The ThoughtWorks.Selenium.Core.dll contains types to interact with the Selenium Server,
so with .NET code we can create new sessions, and perform actions with it, testing
our web sites with real browsers, using our favorite testing framework (MbUnit in
my case).
</p>
        <p>
To start the Selenium Server you need to have JRE 1.5.0 or higher installed and type:
</p>
        <p>
java.exe -jar selenium-server.jar
</p>
        <p>
The server listens to port 4444 by default.
</p>
        <p>
However, to automate this I have added Assembly level SetUp and TearDown methods to
my web tests so the server is started before all the tests and shutdown after the
tests:
</p>
        <p>
          <img alt="selenium_rc2.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_rc2.png" border="0" />
        </p>
        <p>
From .NET you have to use the DefaultSelenium class to create a browser session. In
my tests, I have a base class for web tests that has a SetUp and TearDown methods
that automatically open a close a browser session:
</p>
        <p>
          <img alt="selenium_rc1.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_rc1.png" border="0" />
        </p>
        <p>
ServerUrl, ServerPort and BaseUrl are read from the application configuration file.
The Browser property is passed to the constructor of the base class for web tests.
</p>
        <p>
The actual test should use perform actions in the browser session that has been opened
in the SetUp method. The Selenium IDE has an option to save a test in C# format, that
converts an action to a call to the browser session object, so it can be used easily
from code.
</p>
        <p>
Let see some code of a test (don’t try to compare it with the example of the Selenium
IDE, it is different):
</p>
        <p>
          <img height="1295" alt="selenium_rc3.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_rc3.png" width="679" border="0" />
        </p>
        <p>
As you can see, it is just another way to express the actions.<br />
 <br />
Some thing to clarify is the CheckPageError method. Unfortunately if an ASPX page
throws an exception, the assembly ThoughtWorks.Selenium.Core.dll does not throw that
exception and returns OK. This is because the Selenium Server requests a page and
receives a response, so it doesn’t see any problem. This is very unfortunate and I
hope it will be fixed in future releases. For now what I’m doing is to check if the
body of the page starts with “Server Error”. This works for me because my test website
doesn’t handle custom errors and the default error handling is displayed. You may
have to create your own custom CheckPageError method.
</p>
        <p>
Another thing that doesn’t work as I’d expect is the Selenium.GetSelectOptions method.
If the select element is empty, it returns a string array with one item that contains
an empty string instead of returning an empty string array. Hopefully this will be
also fixed in the future.
</p>
        <p>
Note that to be able to run the tests with Selenium RC you’ll probably need to use
IIS instead of the built in server of Visual Studio.
</p>
        <p>
I usually test my stuff in IE and FireFox. I inherit from the class where the test
methods are defined as shown here:
</p>
        <p>
          <img height="365" alt="selenium_rc4.png" src="http://www.manuelabadia.com/blog/content/binary/selenium_rc4.png" width="502" border="0" />
        </p>
        <p>
If you want to test with more browsers probably this will get ugly and you will have
to work out a better way to run the tests without inheritance.
</p>
        <p>
To test the Server Side mode in the ListControlMediator, the only required changes
to the test method is to place Selenium.WaitForPageToLoad instructions after each
click, so the Selenium Core waits for the postback to complete before continuing processing
the test.
</p>
        <p>
I hope this helps some people to enter in the world of real web tests.
</p>
        <img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=666afc3a-d84d-4412-af43-da0235210cfa" />
      </body>
      <title>Web tests with Selenium</title>
      <guid isPermaLink="false">http://www.manuelabadia.com/blog/PermaLink,guid,666afc3a-d84d-4412-af43-da0235210cfa.aspx</guid>
      <link>http://www.manuelabadia.com/blog/PermaLink,guid,666afc3a-d84d-4412-af43-da0235210cfa.aspx</link>
      <pubDate>Thu, 03 Jan 2008 11:54:02 GMT</pubDate>
      <description>&lt;p&gt;
One of the tools I have been using is &lt;a href="http://www.openqa.org/selenium/"&gt;Selenium&lt;/a&gt;.
Selenium is a test framework for web applications. Selenium is composed of 3 different
projects:
&lt;/p&gt;
&lt;p&gt;
•&amp;nbsp;Selenium Core: A set of cross browser javascript classes that contain the test
framework.&lt;br&gt;
•&amp;nbsp;Selenium IDE: A FireFox plugin that allows creation, recording and editing
of tests for Selenium.&lt;br&gt;
•&amp;nbsp;Selenium RC: A web server and a set of classes to allow integrating Selenium
tests in test applications like MbUnit.
&lt;/p&gt;
&lt;p&gt;
To illustrate the concepts I’m going to use a sample. I have a control called ListControlMediator,
that is used to connect two DropDownList controls in order to move ListItems from
a DropDownList to the other. It can be used to reorder ListItems too. The following
image shows two DropDownLists with a ListControlMediator:
&lt;/p&gt;
&lt;p&gt;
&lt;img height=284 alt=listcontrolmediator1.png src="http://www.manuelabadia.com/blog/content/binary/listcontrolmediator1.png" width=632 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
The identifier is shown near the controls on the page.
&lt;/p&gt;
&lt;p&gt;
The ListControlMediator can work in server side mode, performing a postback each time
a button is pressed. However, it also has a client side mode that uses javascript
to avoid postbacks. So I want to write some tests to check that the control works
properly in client and server side mode, using IE and FireFox.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
The first thing will be to create a page to perform the tests, as the one shown above.
The only functionality of the page shown above is the action to perform when the “Send”
button is clicked.&amp;nbsp; When the “Send” button is clicked, the text of the items
of the ListBox2 is shown in the lResult label (separated with spaces).
&lt;/p&gt;
&lt;p&gt;
The second thing to do is to create a test of the web page. In this step, there are
two main options:
&lt;/p&gt;
&lt;p&gt;
•&amp;nbsp;Create the test by hand.&lt;br&gt;
•&amp;nbsp;Record the test with the Selenium IDE.
&lt;/p&gt;
&lt;p&gt;
I usually record the test with the Selenium IDE and then adjust it a bit. To use the
Selenium IDE just open FireFox and select Tools-&amp;gt;Selenium IDE. Use the record button
to start recording actions:
&lt;/p&gt;
&lt;p&gt;
&lt;img height=446 alt=selenium_ide1.png src="http://www.manuelabadia.com/blog/content/binary/selenium_ide1.png" width=647 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
For example, after some actions in the page I got the following actions recorded:
&lt;/p&gt;
&lt;p&gt;
&lt;img height=633 alt=selenium_ide2.png src="http://www.manuelabadia.com/blog/content/binary/selenium_ide2.png" width=420 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
As you can see, an action can have up to 3 attributes: Command, Target and Value.
If you click on an action, you can select a command from the combo box. There are
a lot of commands available, but you can learn them when you need them. The reference
at the bottom of the Selenium IDE shows the help for the selected command, and the
arguments it takes (Target is the first argument and Value is the second argument).
&lt;/p&gt;
&lt;p&gt;
A cool thing about the Selenium IDE is that it adds an option in the FireFox context
menu called “Show All Available Commands”. When you right click in an element of the
page, it will show a list of the most common commands that can be applied to that
element. That is very helpful for newbies.
&lt;/p&gt;
&lt;p&gt;
After a test has been recorded, we can save it to replay it later (using File-&amp;gt;Save
Test). As a test is not more than a list of actions, and an action can have up to
3 attributes, tests are saved as HTML pages with a table. Each row in the table is
an action, and has three columns, one per attribute of the action.
&lt;/p&gt;
&lt;p&gt;
Once you have some tests saved, you can use the Selenium core to test them. Several
tests are grouped in a “Test Suite”. A test suite is also an HTML file with a table,
where each row in the table has only one column, where a link to the test of the suite
is specified.
&lt;/p&gt;
&lt;p&gt;
To use the Selenium core you will have to copy the “core” directory of the selenium
core distribution to the root folder of your website. In the selenium core distribution,
there is also a directory called “tests” where there are a lot of tests of a test
suite. Create a directory called “tests” in the root folder of your website and copy
the TestSuite.html file found in the “tests” directory of the selenium core distribution.
Edit the TestSuite.html file, leaving only a row in the table that points to the test
saved with the Selenium IDE (copy the saved test to the “tests” directory of your
website). Some tests may not work in some browsers, so you can add that information
to the row. For example, if you add unless="browserVersion.isSafari" to some rows
and you try to run the tests using Safari, those tests won’t be executed.
&lt;/p&gt;
&lt;p&gt;
To run a test suite using the Selenium core you have to point the browser to the /core/TestRunner.html
page:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt=selenium_core1.png src="http://www.manuelabadia.com/blog/content/binary/selenium_core1.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
And select the test suite to run on the left. After the test suite has been selected,
the tests contained in the test suite are shown on the left. When you click on a test
the top center part of the browser shows the actions of the selected test. In the
right there are some controls to run the tests. The bottom part of the browser is
where the test will be run:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt=selenium_core2.png src="http://www.manuelabadia.com/blog/content/binary/selenium_core2.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
The TestRunner.html page accept some parameters to select the test suite, run the
test automatically, etc, but the truth is that we use Selenium RC we won’t need to
mess with the TestRunner anymore.
&lt;/p&gt;
&lt;p&gt;
To use Selenium RC for our web tests we don’t need to copy the core or tests from
the Selenium Core distribution.
&lt;/p&gt;
&lt;p&gt;
Selenium Remote Control (RC) is basically a web server and the ThoughtWorks.Selenium.Core.dll
assembly.
&lt;/p&gt;
&lt;p&gt;
The selenium server is used to open browser sessions and is also a proxy. When the
server opens a browser session it configures the browser to use the selenium server
as a proxy. The selenium server injects the test framework for the pages it uses,
capturing all requests to /selenium-server/ so they return stuff from the Selenium
Core, making the page under test to be able to use the Selenium Core transparently
without Javascript origin policy problems.
&lt;/p&gt;
&lt;p&gt;
The ThoughtWorks.Selenium.Core.dll contains types to interact with the Selenium Server,
so with .NET code we can create new sessions, and perform actions with it, testing
our web sites with real browsers, using our favorite testing framework (MbUnit in
my case).
&lt;/p&gt;
&lt;p&gt;
To start the Selenium Server you need to have JRE 1.5.0 or higher installed and type:
&lt;/p&gt;
&lt;p&gt;
java.exe -jar selenium-server.jar
&lt;/p&gt;
&lt;p&gt;
The server listens to port 4444 by default.
&lt;/p&gt;
&lt;p&gt;
However, to automate this I have added Assembly level SetUp and TearDown methods to
my web tests so the server is started before all the tests and shutdown after the
tests:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt=selenium_rc2.png src="http://www.manuelabadia.com/blog/content/binary/selenium_rc2.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
From .NET you have to use the DefaultSelenium class to create a browser session. In
my tests, I have a base class for web tests that has a SetUp and TearDown methods
that automatically open a close a browser session:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt=selenium_rc1.png src="http://www.manuelabadia.com/blog/content/binary/selenium_rc1.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
ServerUrl, ServerPort and BaseUrl are read from the application configuration file.
The Browser property is passed to the constructor of the base class for web tests.
&lt;/p&gt;
&lt;p&gt;
The actual test should use perform actions in the browser session that has been opened
in the SetUp method. The Selenium IDE has an option to save a test in C# format, that
converts an action to a call to the browser session object, so it can be used easily
from code.
&lt;/p&gt;
&lt;p&gt;
Let see some code of a test (don’t try to compare it with the example of the Selenium
IDE, it is different):
&lt;/p&gt;
&lt;p&gt;
&lt;img height=1295 alt=selenium_rc3.png src="http://www.manuelabadia.com/blog/content/binary/selenium_rc3.png" width=679 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
As you can see, it is just another way to express the actions.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Some thing to clarify is the CheckPageError method. Unfortunately if an ASPX page
throws an exception, the assembly ThoughtWorks.Selenium.Core.dll does not throw that
exception and returns OK. This is because the Selenium Server requests a page and
receives a response, so it doesn’t see any problem. This is very unfortunate and I
hope it will be fixed in future releases. For now what I’m doing is to check if the
body of the page starts with “Server Error”. This works for me because my test website
doesn’t handle custom errors and the default error handling is displayed. You may
have to create your own custom CheckPageError method.
&lt;/p&gt;
&lt;p&gt;
Another thing that doesn’t work as I’d expect is the Selenium.GetSelectOptions method.
If the select element is empty, it returns a string array with one item that contains
an empty string instead of returning an empty string array. Hopefully this will be
also fixed in the future.
&lt;/p&gt;
&lt;p&gt;
Note that to be able to run the tests with Selenium RC you’ll probably need to use
IIS instead of the built in server of Visual Studio.
&lt;/p&gt;
&lt;p&gt;
I usually test my stuff in IE and FireFox. I inherit from the class where the test
methods are defined as shown here:
&lt;/p&gt;
&lt;p&gt;
&lt;img height=365 alt=selenium_rc4.png src="http://www.manuelabadia.com/blog/content/binary/selenium_rc4.png" width=502 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
If you want to test with more browsers probably this will get ugly and you will have
to work out a better way to run the tests without inheritance.
&lt;/p&gt;
&lt;p&gt;
To test the Server Side mode in the ListControlMediator, the only required changes
to the test method is to place Selenium.WaitForPageToLoad instructions after each
click, so the Selenium Core waits for the postback to complete before continuing processing
the test.
&lt;/p&gt;
&lt;p&gt;
I hope this helps some people to enter in the world of real web tests.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=666afc3a-d84d-4412-af43-da0235210cfa" /&gt;</description>
      <comments>http://www.manuelabadia.com/blog/CommentView,guid,666afc3a-d84d-4412-af43-da0235210cfa.aspx</comments>
      <category>ASP.NET;Java;JavaScript;MBUnit;Selenium;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.manuelabadia.com/blog/Trackback.aspx?guid=80742d4d-e250-44cb-8488-6b7cf4b63986</trackback:ping>
      <pingback:server>http://www.manuelabadia.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.manuelabadia.com/blog/PermaLink,guid,80742d4d-e250-44cb-8488-6b7cf4b63986.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.manuelabadia.com/blog/CommentView,guid,80742d4d-e250-44cb-8488-6b7cf4b63986.aspx</wfw:comment>
      <wfw:commentRss>http://www.manuelabadia.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=80742d4d-e250-44cb-8488-6b7cf4b63986</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the coolest tools I have been using for the lasts months is DocProject:
</p>
        <p>
          <a href="http://www.codeplex.com/DocProject/">http://www.codeplex.com/DocProject/</a>
        </p>
        <p>
DocProject generates documentation from an xml comment file using sandcastle. The
generated documentation can be a precompiled help file (help 1.x or help 2.x) or a
web site. 
</p>
        <p>
There are other tools that serve as a friendly GUI for sandcastle but DocProject integrates
great with Visual Studio 2005 (and 2008) and lets you create and maintain the documentation
without effort.
</p>
        <p>
When DocProject is installed, two new project types will show in the “New Project
Dialog”:
</p>
        <p>
• Project Documentation: that lets you generate a precompiled help file.<br />
• DocSite Web Application: that creates a web site with the documentation.<br /></p>
        <p>
          <img src="http://www.manuelabadia.com/blog/content/binary/docproject1.png" border="0" />
        </p>
        <p>
When you select one of those project types, it will ask you for which projects you
want to generate the documentation, and basically that is all that you need to get
DocProject working (of course you need to generate the xml comment file for the projects
you want to document, so be sure to have the checkbox at “Build -&gt; Output -&gt;
XML documentation file” enabled in the project properties.
</p>
        <p>
You can configure a lot of options when generating the documentation. To do that you
have to click in Tool-&gt;Options-&gt;DocProject. I won’t detail the options, but
it is really straightforward to use. The only thing I miss is that this can’t be done
in the project properties for the projects created by DocProject.
</p>
        <p>
There are several styles available for the generated documentation. Here is a pic
of a precompiled help file of the one I’m using:
</p>
        <p>
          <img src="http://www.manuelabadia.com/blog/content/binary/docproject2.png" border="0" />
        </p>
        <p>
You can take a look at a website that uses DocProject here:
</p>
        <p>
          <a href="http://docs.mbunit.com/">http://docs.mbunit.com/</a>
        </p>
        <p>
If you compile often (as I do) you will see that generating the documentation takes
a long time so probably you’ll want to exclude the generation of the documentation
when you compile (Build-&gt;Configuration Manager-&gt;uncheck the build from the documentation
project) and build it when you really need it or if you have use a continuous integration
server, let it do the work for you.
</p>
        <p>
So the only excuse now to not have good documentation for your projects is being lazy.
</p>
        <img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=80742d4d-e250-44cb-8488-6b7cf4b63986" />
      </body>
      <title>DocProject</title>
      <guid isPermaLink="false">http://www.manuelabadia.com/blog/PermaLink,guid,80742d4d-e250-44cb-8488-6b7cf4b63986.aspx</guid>
      <link>http://www.manuelabadia.com/blog/PermaLink,guid,80742d4d-e250-44cb-8488-6b7cf4b63986.aspx</link>
      <pubDate>Thu, 15 Nov 2007 22:58:43 GMT</pubDate>
      <description>&lt;p&gt;
One of the coolest tools I have been using for the lasts months is DocProject:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.codeplex.com/DocProject/"&gt;http://www.codeplex.com/DocProject/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
DocProject generates documentation from an xml comment file using sandcastle. The
generated documentation can be a precompiled help file (help 1.x or help 2.x) or a
web site. 
&lt;/p&gt;
&lt;p&gt;
There are other tools that serve as a friendly GUI for sandcastle but DocProject integrates
great with Visual Studio 2005 (and 2008) and lets you create and maintain the documentation
without effort.
&lt;/p&gt;
&lt;p&gt;
When DocProject is installed, two new project types will show in the “New Project
Dialog”:
&lt;/p&gt;
&lt;p&gt;
•&amp;nbsp;Project Documentation: that lets you generate a precompiled help file.&lt;br&gt;
•&amp;nbsp;DocSite Web Application: that creates a web site with the documentation.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.manuelabadia.com/blog/content/binary/docproject1.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
When you select one of those project types, it will ask you for which projects you
want to generate the documentation, and basically that is all that you need to get
DocProject working (of course you need to generate the xml comment file for the projects
you want to document, so be sure to have the checkbox at “Build -&amp;gt; Output -&amp;gt;
XML documentation file” enabled in the project properties.
&lt;/p&gt;
&lt;p&gt;
You can configure a lot of options when generating the documentation. To do that you
have to click in Tool-&amp;gt;Options-&amp;gt;DocProject. I won’t detail the options, but
it is really straightforward to use. The only thing I miss is that this can’t be done
in the project properties for the projects created by DocProject.
&lt;/p&gt;
&lt;p&gt;
There are several styles available for the generated documentation. Here is a pic
of a precompiled help file of the one I’m using:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.manuelabadia.com/blog/content/binary/docproject2.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
You can take a look at a website that uses DocProject here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://docs.mbunit.com/"&gt;http://docs.mbunit.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you compile often (as I do) you will see that generating the documentation takes
a long time so probably you’ll want to exclude the generation of the documentation
when you compile (Build-&amp;gt;Configuration Manager-&amp;gt;uncheck the build from the documentation
project) and build it when you really need it or if you have use a continuous integration
server, let it do the work for you.
&lt;/p&gt;
&lt;p&gt;
So the only excuse now to not have good documentation for your projects is being lazy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=80742d4d-e250-44cb-8488-6b7cf4b63986" /&gt;</description>
      <comments>http://www.manuelabadia.com/blog/CommentView,guid,80742d4d-e250-44cb-8488-6b7cf4b63986.aspx</comments>
      <category>Microsoft .NET Framework;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.manuelabadia.com/blog/Trackback.aspx?guid=6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938</trackback:ping>
      <pingback:server>http://www.manuelabadia.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.manuelabadia.com/blog/PermaLink,guid,6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.manuelabadia.com/blog/CommentView,guid,6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938.aspx</wfw:comment>
      <wfw:commentRss>http://www.manuelabadia.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
From time to time I like to evaluate the way I’m working, investigate on new alternatives,
try other approaches, etc. in order to improve the way I do things. Other times, I
have to change the way I do some things by necessity. This time was a bit of both.
The number of components I’m selling on my web page <a href="http://www.manuelabadia.com">www.manuelabadia.com</a> is
growing slowly and some things I was doing by hand were a pain to maintain and started
to take too much time, so a change was really needed. Also, in the development area,
things were also getting more complex.
</p>
        <p>
Distribution of the components by mail is a lot less reliable than I thought as some
companies have really strict firewall/attachment policies. Implementing a decent LicenseProvider
based on digital signature was more complex than I thought, has some hurdles with
ASP.NET and works a bit different between web site projects and web application projects.
However, having the LicenseProvider implemented has freed me of all component distribution
and signing, saving a lot of time and headaches.
</p>
        <p>
Maintaining and developing new components was also getting more complicated, because
components were starting to share code, and having to maintain two versions of the
same code is problematic and error prone. However, splitting the components in several
projects and then using ILMerge seems to work great. Improving my subversion merge/branch
skills was also necessary as I end with a lot of releases with a very similar codebase
but with little differences between them. Better tool integration for ordinary tasks
with Visual Studio has also helped a lot. I’ll comment about a few of these tools
in a future.
</p>
        <p>
There seem to be a lot of good tools emerging with a goal to improve the quality and
reliability of our code. Microsoft research is also trying some things with Spec#
and Pex. Maybe I’ll blog about those when Pex becomes available to the masses.
</p>
        <p>
So what about the future? Well, I have a lot of ideas for new components and new features
for the existing ones. As always, the biggest problem is time. There’s no time to
do all the stuff I have in mind or the cool things I want to try (has anybody tried <a href="http://www.codeplex.com/SharpMap">SharpMap</a>?)
I have a component in the works that has been nearly finished for a couple of months.
I hope to finish it at the end of the year or in January 2008. After that probably
I’ll concentrate on further improving the existing components and checking if something
new can be added if the version of ASP.NET shipped Visual Studio 2008 has a couple
of significant changes. After that probably I won’t release more components because
I can’t be sure to be able to provide a good service if I release more components.<br />
 <br />
As I said before, the sales are growing slowly, and the components are being used
in most of the “important” countries:
</p>
        <p>
          <img src="http://www.manuelabadia.com/blog/content/binary/products_in_the_world.png" border="0" />
        </p>
        <p>
This shows me that I’m doing things well and encourages me to work harder and keep
improving my skills.
</p>
        <img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938" />
      </body>
      <title>Continuous Evolution</title>
      <guid isPermaLink="false">http://www.manuelabadia.com/blog/PermaLink,guid,6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938.aspx</guid>
      <link>http://www.manuelabadia.com/blog/PermaLink,guid,6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938.aspx</link>
      <pubDate>Thu, 01 Nov 2007 23:04:32 GMT</pubDate>
      <description>&lt;p&gt;
From time to time I like to evaluate the way I’m working, investigate on new alternatives,
try other approaches, etc. in order to improve the way I do things. Other times, I
have to change the way I do some things by necessity. This time was a bit of both.
The number of components I’m selling on my web page &lt;a href="http://www.manuelabadia.com"&gt;www.manuelabadia.com&lt;/a&gt; is
growing slowly and some things I was doing by hand were a pain to maintain and started
to take too much time, so a change was really needed. Also, in the development area,
things were also getting more complex.
&lt;/p&gt;
&lt;p&gt;
Distribution of the components by mail is a lot less reliable than I thought as some
companies have really strict firewall/attachment policies. Implementing a decent LicenseProvider
based on digital signature was more complex than I thought, has some hurdles with
ASP.NET and works a bit different between web site projects and web application projects.
However, having the LicenseProvider implemented has freed me of all component distribution
and signing, saving a lot of time and headaches.
&lt;/p&gt;
&lt;p&gt;
Maintaining and developing new components was also getting more complicated, because
components were starting to share code, and having to maintain two versions of the
same code is problematic and error prone. However, splitting the components in several
projects and then using ILMerge seems to work great. Improving my subversion merge/branch
skills was also necessary as I end with a lot of releases with a very similar codebase
but with little differences between them. Better tool integration for ordinary tasks
with Visual Studio has also helped a lot. I’ll comment about a few of these tools
in a future.
&lt;/p&gt;
&lt;p&gt;
There seem to be a lot of good tools emerging with a goal to improve the quality and
reliability of our code. Microsoft research is also trying some things with Spec#
and Pex. Maybe I’ll blog about those when Pex becomes available to the masses.
&lt;/p&gt;
&lt;p&gt;
So what about the future? Well, I have a lot of ideas for new components and new features
for the existing ones. As always, the biggest problem is time. There’s no time to
do all the stuff I have in mind or the cool things I want to try (has anybody tried &lt;a href="http://www.codeplex.com/SharpMap"&gt;SharpMap&lt;/a&gt;?)
I have a component in the works that has been nearly finished for a couple of months.
I hope to finish it at the end of the year or in January 2008. After that probably
I’ll concentrate on further improving the existing components and checking if something
new can be added if the version of ASP.NET shipped Visual Studio 2008 has a couple
of significant changes. After that probably I won’t release more components because
I can’t be sure to be able to provide a good service if I release more components.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
As I said before, the sales are growing slowly, and the components are being used
in most of the “important” countries:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.manuelabadia.com/blog/content/binary/products_in_the_world.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This shows me that I’m doing things well and encourages me to work harder and keep
improving my skills.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938" /&gt;</description>
      <comments>http://www.manuelabadia.com/blog/CommentView,guid,6933d7ba-0d2b-4e3f-b5f2-8e1514a2b938.aspx</comments>
      <category>ASP.NET;General;Microsoft .NET Framework;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.manuelabadia.com/blog/Trackback.aspx?guid=9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1</trackback:ping>
      <pingback:server>http://www.manuelabadia.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.manuelabadia.com/blog/PermaLink,guid,9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.manuelabadia.com/blog/CommentView,guid,9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1.aspx</wfw:comment>
      <wfw:commentRss>http://www.manuelabadia.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One cool thing in ASP.NET 2.0 is the concept of build providers. A file extension
can be associated with a build provider that parses it and generates the associated
code.
</p>
        <p>
For example, the .XSD files have an associated build provider that generates a strongly
typed dataset.
</p>
        <p>
The bad news is that build providers only work for web site projects and not
for web application projects. I don’t know what the exact reason is for Microsoft
not having them working on web application projects but at the moment, we have to
manually generate the associated code files and add them to our project. I hope they
will fix this at least for VS 2008.
</p>
        <p>
For now, they recommend creating a custom tool in order to handle the file creation.
I don’t know very much about Visual Studio internals and I don’t have free time at
the moment so I won’t try it.<br />
 <br />
If someone has some free time and can give it a try it will be cool to create a custom
tool that reads the configured build providers from the web.config and generates code
based on the file type and build provider.
</p>
        <p>
There is a nice article that explains how to create something like the build providers
for windows forms that can be a good starting point:
</p>
        <p>
          <a href="http://msdn.microsoft.com/msdnmag/issues/06/02/CuttingEdge/">http://msdn.microsoft.com/msdnmag/issues/06/02/CuttingEdge/</a>
          <br />
        </p>
        <img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1" />
      </body>
      <title>Web Application Projects vs Web Site Projects - Subtle differences (Part 2)</title>
      <guid isPermaLink="false">http://www.manuelabadia.com/blog/PermaLink,guid,9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1.aspx</guid>
      <link>http://www.manuelabadia.com/blog/PermaLink,guid,9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1.aspx</link>
      <pubDate>Mon, 27 Aug 2007 08:44:35 GMT</pubDate>
      <description>&lt;p&gt;
One cool thing in ASP.NET 2.0 is the concept of build providers. A file extension
can be associated with a build provider that parses it and generates the associated
code.
&lt;/p&gt;
&lt;p&gt;
For example, the .XSD files have an associated build provider that generates a strongly
typed dataset.
&lt;/p&gt;
&lt;p&gt;
The bad news is that build providers only work for web site&amp;nbsp;projects and not
for web application projects. I don’t know what the exact reason is for Microsoft
not having them working on web application projects but at the moment, we have to
manually generate the associated code files and add them to our project. I hope they
will fix this at least for VS 2008.
&lt;/p&gt;
&lt;p&gt;
For now, they recommend creating a custom tool in order to handle the file creation.
I don’t know very much about Visual Studio internals and I don’t have free time at
the moment so I won’t&amp;nbsp;try it.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
If someone has some free time and can give it a try it will be cool to create a custom
tool that reads the configured build providers from the web.config and generates code
based on the file type and build provider.
&lt;/p&gt;
&lt;p&gt;
There is a nice article that explains how to create something like the build providers
for windows forms that can be a good starting point:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/02/CuttingEdge/"&gt;http://msdn.microsoft.com/msdnmag/issues/06/02/CuttingEdge/&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1" /&gt;</description>
      <comments>http://www.manuelabadia.com/blog/CommentView,guid,9ecc2c07-9552-4cc3-a51c-f8a2b7f58ed1.aspx</comments>
      <category>ASP.NET;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.manuelabadia.com/blog/Trackback.aspx?guid=ab5495ee-6927-40fe-ab3a-38da8dde188c</trackback:ping>
      <pingback:server>http://www.manuelabadia.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.manuelabadia.com/blog/PermaLink,guid,ab5495ee-6927-40fe-ab3a-38da8dde188c.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.manuelabadia.com/blog/CommentView,guid,ab5495ee-6927-40fe-ab3a-38da8dde188c.aspx</wfw:comment>
      <wfw:commentRss>http://www.manuelabadia.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ab5495ee-6927-40fe-ab3a-38da8dde188c</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last weekend I tried to compile some old C++ code that was working without problems
in VS 2003. Unfortunately it didn’t work in VS 2005 and it was reporting some strange
errors in the stl vector include file:
</p>
        <p>
          <br />
          <font face="Courier New" size="1">Error      1            
error C2825: '_MycontTy': must be a class or namespace when followed by '::'               
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1323      
<br />
Error      2            
error C2039: 'difference_type' : is not a member of '`global namespace''           
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1323      
<br />
Error      3            
error C2146: syntax error : missing ',' before identifier 'difference_type'            
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1323      
<br />
Error      4            
error C2065: 'difference_type' : undeclared identifier   C:\Program Files
(x86)\Microsoft Visual Studio 8\VC\include\vector     1323      
<br />
Error      5            
error C2955: 'std::_Ranit' : use of class template requires template argument list          
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1325      
<br />
Error      6            
error C2825: '_MycontTy': must be a class or namespace when followed by '::'               
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1380      
<br />
Error      7            
error C2039: 'size_type' : is not a member of '`global namespace''         
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector         
1380      
<br />
Error      8            
error C2146: syntax error : missing ';' before identifier '_Myoff'              
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector         
1380      
<br />
Error      9            
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int        
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector             
1380      
<br />
Error      10          
error C2825: '_MycontTy': must be a class or namespace when followed by '::'               
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1403      
<br />
Error      11          
error C2327: 'std::_Vb_iter_base&lt;_MycontTy&gt;::size_type' : is not a type name,
static, or enumerator               
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector    
1403      
<br />
Error      12          
error C2039: 'size_type' : is not a member of '`global namespace''         
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector         
1403      
<br />
Error      13          
error C2146: syntax error : missing ';' before identifier '_My_actual_offset'      
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1403      
<br />
Error      14          
error C2086: 'int std::_Vb_iter_base&lt;_MycontTy&gt;::size_type' : redefinition    
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector       
1403      
<br />
Error      15          
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int        
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector             
1404      
<br />
Warning             
16           warning C4183: '_My_actual_offset':
missing return type; assumed to be a member function returning 'int'   
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector    
1404      
<br /></font>
        </p>
        <p>
I didn’t found any reference about those errors in the web and after looking at the
code I was completely puzzled about them. Also, as I haven’t used C++ in two years
the code was “darker” than usual for me. I guess that I’m now a lazy C# programmer.
</p>
        <p>
As my MSDN subscription has some free support incidents that I have never used I decided
to try it. My experience was great. I explained my problem to a Microsoft Technical
Support guy, sent my solution, and a couple of days later he found the problem.
</p>
        <p>
Of course, the problem had nothing to do with std::vector. Somehow the use of std::swap&lt;T&gt;(T
obj1, T obj2) in several places broke the compiler. The workaround suggested was to
use std::swap&lt;&gt; instead of std::swap&lt;int&gt; so the type deduction mechanism
in the compiler takes place avoiding a nasty VC++ 2005 bug.<br />
As the problem was because of a bug in VC++ 2005 my number of assistance tickets is
not decremented so I can keep bothering Microsoft support guys for free ;-)
</p>
        <p>
I think I didn’t spent more than 30 minutes looking at the problem and I have it fixed
for free thanks to their support staff. Without Microsoft support I would have spent
a lot of days to find the error, or more probably, I would have stopped trying to
convert the old project to VS 2005.
</p>
        <p>
Thank god that their technical support has nothing to do with the activation and Vista
related support.
</p>
        <p>
So, if you ever run into a hard technical problem, think about calling Microsoft Support.
</p>
        <img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=ab5495ee-6927-40fe-ab3a-38da8dde188c" />
      </body>
      <title>First experience with Microsoft Technical Support</title>
      <guid isPermaLink="false">http://www.manuelabadia.com/blog/PermaLink,guid,ab5495ee-6927-40fe-ab3a-38da8dde188c.aspx</guid>
      <link>http://www.manuelabadia.com/blog/PermaLink,guid,ab5495ee-6927-40fe-ab3a-38da8dde188c.aspx</link>
      <pubDate>Fri, 20 Jul 2007 15:06:32 GMT</pubDate>
      <description>&lt;p&gt;
Last weekend I tried to compile some old C++ code that was working without problems
in VS 2003. Unfortunately it didn’t work in VS 2005 and it was reporting some strange
errors in the stl vector include file:
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;font face="Courier New" size=1&gt;Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2825: '_MycontTy': must be a class or namespace when followed by '::'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2039: 'difference_type' : is not a member of '`global namespace''&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2146: syntax error : missing ',' before identifier 'difference_type'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2065: 'difference_type' : undeclared identifier&amp;nbsp;&amp;nbsp; C:\Program Files
(x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2955: 'std::_Ranit' : use of class template requires template argument list&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1325&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2825: '_MycontTy': must be a class or namespace when followed by '::'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1380&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2039: 'size_type' : is not a member of '`global namespace''&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1380&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2146: syntax error : missing ';' before identifier '_Myoff'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1380&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1380&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2825: '_MycontTy': must be a class or namespace when followed by '::'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1403&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2327: 'std::_Vb_iter_base&amp;lt;_MycontTy&amp;gt;::size_type' : is not a type name,
static, or enumerator&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1403&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2039: 'size_type' : is not a member of '`global namespace''&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1403&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2146: syntax error : missing ';' before identifier '_My_actual_offset'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1403&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C2086: 'int std::_Vb_iter_base&amp;lt;_MycontTy&amp;gt;::size_type' : redefinition&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1403&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1404&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
Warning&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; warning C4183: '_My_actual_offset':
missing return type; assumed to be a member function returning 'int'&amp;nbsp;&amp;nbsp;&amp;nbsp;
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
1404&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
I didn’t found any reference about those errors in the web and after looking at the
code I was completely puzzled about them. Also, as I haven’t used C++ in two years
the code was “darker” than usual for me. I guess that I’m now a lazy C# programmer.
&lt;/p&gt;
&lt;p&gt;
As my MSDN subscription has some free support incidents that I have never used I decided
to try it. My experience was great. I explained my problem to a Microsoft Technical
Support guy, sent my solution, and a couple of days later he found the problem.
&lt;/p&gt;
&lt;p&gt;
Of course, the problem had nothing to do with std::vector. Somehow the use of std::swap&amp;lt;T&amp;gt;(T
obj1, T obj2) in several places broke the compiler. The workaround suggested was to
use std::swap&amp;lt;&amp;gt; instead of std::swap&amp;lt;int&amp;gt; so the type deduction mechanism
in the compiler takes place avoiding a nasty VC++ 2005 bug.&lt;br&gt;
As the problem was because of a bug in VC++ 2005 my number of assistance tickets is
not decremented so I can keep bothering Microsoft support guys for free ;-)
&lt;/p&gt;
&lt;p&gt;
I think I didn’t spent more than 30 minutes looking at the problem and I have it fixed
for free thanks to their support staff. Without Microsoft support I would have spent
a lot of days to find the error, or more probably, I would have stopped trying to
convert the old project to VS 2005.
&lt;/p&gt;
&lt;p&gt;
Thank god that their technical support has nothing to do with the activation and Vista
related support.
&lt;/p&gt;
&lt;p&gt;
So, if you ever run into a hard technical problem, think about calling Microsoft Support.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.manuelabadia.com/blog/aggbug.ashx?id=ab5495ee-6927-40fe-ab3a-38da8dde188c" /&gt;</description>
      <comments>http://www.manuelabadia.com/blog/CommentView,guid,ab5495ee-6927-40fe-ab3a-38da8dde188c.aspx</comments>
      <category>Visual Studio</category>
    </item>
  </channel>
</rss>