Skip to main content

Converting .Net 1.1 Applications to 2.0

This post outlines my approach and findings from converting several hundred .Net 1.1 projects (300+) from .Net 1.1 to .Net 2.0.

Retrieve all .Net 1.1 source code from source code control repository

At the root directory, use “DIR /C /B *.csproj >> projects.txt” at a command line to dump the full path of each C#.Net project into a file

Use the /upgrade option with devenv to convert the .Net projects to 2.0 (devenv "MyProject.sln" /upgrade)

  1. Open a new worksheet in Excel
  2. Type devenv in the A1 cell; copy it down into the next several hundred rows
  3. Open the projects.txt file, select all, and copy
  4. Placing the cursor in cell B1 in Excel, paste
  5. Type /upgrade in the C1 cell; copy it down into the next several hundred rows
  6. In the D1 cell, paste in the following formula =A1& " " & B1& " " & C1; copy it down into the next several hundred rows
  7. Select the D column and copy
  8. Create a new file called convert.bat
  9. convert.bat and paste the clipboard from Excel into the file and save
  10. From a VS.Net 2005 command line, execute the convert.bat file piping it to convert.log: convert.bat >> convert.log

This process will upgrade the projects to .Net 2.0, create a backup of the original files, and output an upgrade report in XML format (UpgradeLog.xml).

Using Windows Explorer or your favorite searching tool (RegEx, FindStr, etc.), find all the UpgradeLog.xml files possessing the string “

Resolve all upgrade / conversion issues. Likely, this will be a manual process. (i.e. open up the project and resolve issues)

Use MSBuild to compile the newly-converted .Net 2.0 projects

  1. In Excel, copy the column containing all project files (B)
  2. Open a second worksheet; paste into column B
  3. Type msbuild in the A1 cell; copy it down into the next several hundred rows
  4. In the C1 cell, paste in the following formula =A1& " " & B1; copy it down into the next several hundred rows
  5. Select the C column and copy
  6. Create a new file called compile.bat
  7. Open compile.bat and paste the clipboard from Excel into the file and save
  8. From a VS.Net 2005 command line, execute the compile.bat file piping it to compile.log: compile.bat >> compile.log

Resolve all compilation issues. Likely, this will be a manual process. (i.e. open up the project and resolve issues)

Issues Encountered
  • Broken references
  • System.Diagnostics.Assert no longer supported. Use System.Diagnostics.Trace.Assert()
  • Post Build Events e.g. GAC’ing using hard-coded gacutil.exe path (e.g. call "c:\program files\Microsoft Visual Studio .NET 2003\common7\tools\vsvars32.bat")
  • Broken pre/post-build event scripting
  • Enterprise Library hard-coded paths (e.g. C:\Program Files\Microsoft Enterprise Instrumentation\Bin\Microsoft.EnterpriseInstrumentation.dll)
  • C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Lib\' specified in 'LIB environment variable' -- 'The system cannot find the path specified. ' à Resolution: remove all vc98 references from LIB path, reboot
  • Use project properties dialog to set keyfile instead of within AssemblyInfo.cs ([assembly: AssemblyKeyFile(@"W:\ServiceFramework\_setup\key.snk")]) – could be scripted
  • Many events and methods unavailable in Enterprise Library 2.0
  • NUnit 2.0 implementation different / incompatible from 1.0 (Broken/missing test harness projects)
  • Missing framework references
  • Missing web.config files
  • 'System.Xml.Xsl.XslTransform' is obsolete: 'This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead.'
  • Devenv /upgrade converts .Net 1.1 web applications to .Net 2.0 Web Site Projects instead of Web Application Projects. These projects must be individually converted from WSP to WAP.

Happy upgrading!


Nathan's AX Hat said…
Hi Jeff,

Thanks for your useful post. I believe you meant:

DIR /S /B *.csproj >> projects.txt

using the /S = "Displays files in specified directory and all subdirectories." You've shown the /C switch, "Display the thousand separator in file sizes."

Jeff Hunsaker said…
How right you are! Thanks for the catch.

Popular posts from this blog

Shrinking WSS (Sharepoint) SQL Server Log Files

Yesterday, while migrating a source repository from StarTeam to TFS, I received the following error:
"TF30042: The database is full. Contact your Team Foundation Server administrator."Excuse you? Sure enough, my 100+ GB drive was full on the server. But I'd only migrated around 1000 items. Surely SQL wasn't consuming 100MB per file.

Turns out (yes, there was a lot of crud on the drive but...) the majority of the space, almost 40GB was being consumed by the Windows Sharepoint Services WSS Content data and log SQL Server files. Huh? I still need to investigate and understand why this portal, which is 100% unused, grew so large. Regardless, here's what I did to resolve:

Since this is not yet a production database, I flipped the SQL recovery option from Full to Simple for WSS Content and several other databases. Detail here and here.
Executed the maintenance plan for all the databases to get backups and clear out some of these files. That didn't help much. The Auto_…

TFS Error | The type initializer for 'Microsoft.TeamFoundation.Build.Server.BuildInformationNodeBinder' threw an exception.

Posting this one for the search engines. If you ever receive the exception "The type initializer for 'Microsoft.TeamFoundation.Build.Server.BuildInformationNodeBinder' threw an exception.", more than likely, your drive space is at 0 on your TFS application tier box.

I encountered this at a client recently. The root cause was that IIS logs had filled up the OS drive (C:\). I switched IIS logging to the applications drive (D:\) which cleaned up the OS drive and resolved the issue.

Detailed message:

TF53010: The following error has occurred in a Team Foundation component or extension:

Date (UTC): 6/7/2011 4:18:53 PM


Application Domain: /LM/W3SVC/8080/ROOT/tfs-1-129519118182628600

Assembly: Microsoft.TeamFoundation.Framework.Server, Version=, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a; v2.0.50727

Service Host: 7ecfbd77-b386-4d75-b038-b05474782696 (DefaultCollection)

Process Details:

Process Name: w3wp

Process Id: 3676

Thread Id: 5752


Verified by Visa: Everything We Tell Folks to Avoid

Phishing is defined by F-Secure as: "Fraudulent e-mail or website claiming to be legitimate seeking indentifiable information. Phishing is an attempt to steal your personal data."When I recently attempted an online purchase from WalMart using my VISA card, being a security wanta-be, I immediately thought phishing when redirected to and saw this dialog:

Seriously, these folks have to be kidding. You're asking for my personal data during a transaction and claim that's its a service " no additional cost." Wow! Thanks...but absolutely not, you jokers. As a malicious thief, I can go a long way with this data.

This is exactly the type of experience which aids malfeasance and the folks trying to steal personal data / identities. How long have we been working to educate folks to avoid providing this type of data under these type of circumstances? Years. And we're just now starting to turn the corner.

VISA, get rid of this! When folks submi…