Tuesday, November 27, 2012

Investigations: Could not load type 'System.Web.Razor.Parser.[TypeName]' from assembly 'System.Web.Razor, Version=2.0.0.0'

I recently faced this issue while working on my ASP.NET MVC 4 project over .NET Framework 4.5.

System was throwing following error whenever I make a call to any member of RazorEngine.Razor class.
Like Razor.Parse, etc.
In order to investigate the issue, I checked at various places in my project and GAC, and finally I could see following been placed in web.config file of  my project. It seems it is incorrectly creating the binding redirect for System.Web.Razor.


      <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>

Remove this section from web.config file, and the issue should be resolved now.

Wednesday, November 21, 2012

Investigations: How to identify current path in referenced library in MVC application?


Following is the exact scenario in my application:

1) MVC application is referencing one DLL (a Class library project).
2) some code in the class library need to access folders and files from the MVC application.
Say, there is one folder named as "Templates" in root of my MVC application.
How should I able to get the path of that folder in context of execution path from any method of the class library.
If I try "~\templates" or "\templates", it looks for folder in C:\Program Files\... instead of the websites folder.
If I try "templates", it looks for folder in C:\ only.
any idea of how to achieve this


Tuesday, November 13, 2012

Microsoft.Commom.targets Warning# 983 The reference assemblies for Framework ".NET Framework, Version=X.x" were not found

Following is the exact error message:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (983): The reference assemblies for framework ".NETFramework,Version=v4.5" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend.

This occurs when your Build server does not have Visual Studio 2012 (which ideally should not be anyway), and it has only .NET Framework 4.5, and no Framework 4.5 SDK or .NET Framework Framework Targetting-Pack is not installed.

In order to get rid of these warning messages, you have two options:
1) Install SDK or Targetting-Pack for .NET Framework 4.5. But they are considerably large in size.
2) The other option is to copy following folder from your development machine to your TFS build machine.

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5

Doing this should fix the issue, and the warning messages will be disappeared.

Microsoft.Common.targets Warning/ Error: 1578 There was a mismatch between the processor architecture of the project being built...

We get this sort of errors most probably while using MS Build to deploy project from a development environment to production environment by implementing Continuous Integration Build, etc approach.

The exact error message would look like:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (1578): There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "<<Assembly Name>>", "AMD64". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project 

As such if you intend to deploy your application over x86 platform, then this warning message is just a warning, nothing else, and will not harm execution of your application in any way.

However, perform following steps in order to get rid of this warning:

1) Open project file (.csproj) using some text editor (like, Notepad, Notepad++, etc)
2) Add following in <PropertyGroup> section of the project file.

<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>

3) Save changes done to .csproj file.
4) Do the same for all project files within your solution.

Now try build using MS Build, and you will not get those warning messages.