CSharp – Get Assembly and File Version

If you want to know the version of currently executing managed assembly, you can use Reflection.Assembly.

Here is code snippet which can be used to do get managed assembly version.

private string GetVersion()
{
      return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}

Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list

You might see following error when browse your application site made of ASP.NET 4.0 on IIS 7. This is because IIS is installed after DotNet and asp.net is not registered with IIS.

HTTP Error 500.21 – Internal Server Error
Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list

Resolution

To resolve this issue, run the following from command line:

aspnet_regiis.exe –i

This will register asp.net with IIS. The aspnet_regiis.exe file can be found in either

  • %windir%\Microsoft.NET\Framework\v4.0.30319
  • %windir%\Microsoft.NET\Framework64\v4.0.30319 (on a 64-bit machine)

Common TFS commands

tf.exe is Team Foundation source control command-line tool which can be used to perform source control operations without GUI interaction. Here are some common tf commands I use in my daily work. You can run command tf /? to view more or visit MSDN TF Command Line Tool Reference

Common tf commands

Sync Sync files under current folder tf get
Sync files under current folder and all sub folders tf get . /r
Sync file to a given revision tf get <filename>;<revision>
Display what would be synced tf get /preview
Force sync tf get /all
Force sync, will override existing files tf get /force
Add Add new file tf add <filename>
Checkout Checkout file for editing tf checkout <filename>
Delete Delete file tf delete <filename>
Rename Rename file tf rename
Checkin Submit open files to tfs server tf checkin
Resolve Resolve file conflicts tf resolve
Resolve file with automatical merge tf resolve /i /auto:acceptmerge
Shelve Package pending change and store to tfs server tf shelve shelvesetname
Unshelve Unpackage shelve from tfs server into current workspace tf unshelve shelvesetname
workspace Update workspace configurations tf workspace workspacename

Common tfpt commands

tftp.exe is a command line tool that you can use to work with files and directories under version control, team projects, and work items. Some commands display a graphical user interface when run. tfpt.exe is part of Team Foundation Server Power Tools which can be downloaded here.

Revert unchanged files tfpt uu /noget
Search all modified files not in source control and add to pending change list tfpt online
Scorch – Remove all files in local workspaces but not in source control tfpt treeclean -delete
Undo submitted change tfpt undo
View difference of a shelve tfpt review /shelveset

How to debug msbuild issues

To debug msbuild build failures, you can run following from VS command prompt to get more build log output

msbuild /v:diag <solutionname>

If you want to log messages for debug during build, you can use Message tasks. For example, use Message task inside a target

<Target Name="DisplayMessages">
  <Message Text="Project File Name = $(MSBuildProjectFile)" />
  <Message Text="Project Extension = $(MSBuildProjectExtension)" />
</Target>

If you are doing build in VS2010 IDE, you can follow these steps to turn on verbose building to help debug msbuild issues.

  1. Open Visual Studio and go into the Tools->Options menu
  2. Go to Projects and Solutions->Build and Run and set MSBuild project build output verbosity to Diagnostic.
  3. Rebuild your project and now the output will show you all the environment variables and parameters.

SQL Server Version History

By default you can’t restore a sql backup that was taken from a higher version sql server. Otherwise you might get following error when doing restore.

System.Data.SqlClient.SqlError: The database was backed up on a server running version 10.50.1600. That version is incompatible with this server, which is running version 10.00.2714. Either restore the database on a server that supports the backup, or use a backup that is compatible with this server

SQL Server version can be checked by running following sql query

SELECT @@Version

SQL Server Version History Tracking Table

Version SQL Server Release
10.50.2500.0 SQL Server 2008 R2 SP1
10.5.1660.1 SQL Server 2008 R2 RTM
10.00.5500 SQL Server 2008 SP3
10.00.4000 SQL Server 2008 SP2
10.00.2531 SQL Server 2008 SP1
10.00.1600 SQL Server 2008 RTM
9.00.5000 SQL Server 2005 SP4
9.00.4035 SQL Server 2005 SP3
9.00.3042 SQL Server 2005 SP2
9.00.2047 SQL Server 2005 SP1
9.00.1399 SQL Server 2005 RTM
8.00.2039 SQL Server 2000 SP4
8.00.0760 SQL Server 2000 SP3
8.00.0534 SQL Server 2000 SP2
8.00.0384 SQL Server 2000 SP1
8.00.0194 SQL Server 2000 RTM

[ODBC Driver Manager] Data source name not found and no default driver specified

If you run osql.exe utility on server that does not have SQL server installed, you might get following error: [ODBC Driver Manager] Data source name not found and no default driver specified.

This is because osql utility uses ODBC API to communicate to SQL server and SQL ODBC driver is not installed. To fix this, simple download and install SQL Native Client. For example, if you are using the osql.exe from the SQL 2008 (10.0), you should install the SQL Native Client 10.0 from: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=C6C3E9EF-BA29-4A43-8D69-A2BED18FE73C

Grant Permission to DefaultAppPool Identity

After upgrading web applications to IIS 7.5 on Windows Server 2008 R2, you might get following error.

Access to the path ‘d:\site\cache.txt’ is denied.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.UnauthorizedAccessException: Access to the path ‘d:\site\cache.txt’ is denied.
ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via <identity impersonate="true"/>, the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user.
To grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.

Continue reading

Make IIS 7.5 application pools run as NETWORK SERVICE

There is a break change in IIS 7.5 on Windows 7 and Windows Server 2008 R2. The default identity for running an application pool is "ApplicationPoolIdentity".  If you have a web application developed against application pools running with NETWORK SERVICE on IIS6/7, it might break after migrated to IIS 7.5 due to default application pool identity change.

Continue reading

Mixed mode assembly Error After Upgrading to DotNet 4.0

After upgrading existing DotNet 2.0 or 3.5 application to DotNet 4.0, you might see following error message

Mixed mode assembly is built against version ‘v2.0.50727′ of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

To fix this issue, put a config file next to your exe called <exename>.exe.config with the following content:

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>
</configuration>

Or if your exe already has config file, you can just append <startup> element section. To know more detail, check out Mark Miller’s post What is useLegacyV2RuntimeActivationPolicy for?

Update – 2011/11/15.

Just hit a similar issue today when I referrence SMO in a DotNet 4 Executable

Microsoft.SqlServer.Management.Dac.DacException: Unable to install DacInstance. Please verify the components of the application. —> System.IO.FileLoadException: Mixed mode assembly is built against version ‘v2.0.50727′ of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

The resolution is same – in app.config file of the executable, add the following settings:

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>
</configuration>