C# – Portable Class Library in MVC 4 / Razor with Visual Studio 2012 RC

.net-4.5asp.netcportable-class-libraryrazor

since working with Visual Studio 2012 RC we get an HttpCompileException when using a class out of an portable class library (.net 4.5 & metro profile) within a razor view.

Exception: (german to english translated on google, sorry)

System.Web.HttpCompileException (0x80004005):     
c:\Users\user\AppData\Local\Temp\Temporary ASP.NET        
Files\root\1995167a\126b7c4d\App_Web_index.cshtml.1fbcdbb1.zaniprm5.0.cs(29):

error CS0012: The type 'System.Object' is not in a referenced assembly is 
defined. Add a reference to the Assembly "System.Runtime, Version = 4.0.0.0, 
Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" added.   

at
System.Web.Compilation.AssemblyBuilder.Compile()   
System.Web.Compilation.BuildProvidersCompiler.PerformBuild()    
System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
...

Solution structure:

  • Portable Class Library (.net 4.5 & metro profile)
    • public class User { … }
  • MVC 4 (.net 4.5)
    • Reference to Portable Class Library
    • Razor-View
      • @model User

Since Visual Studio 2012 RC adding reference "System.Runtime" is not possible any more.

Best Answer

In the Views\Web.config file, add the following code under the <system.web> section:

<compilation debug="true" targetFramework="4.5">
    <assemblies>
        <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </assemblies>
</compilation>

There are a bunch of other assemblies you may also need to reference, depending on what types your portable code is using. You can either add each one as you encounter the error, or add the full list of assemblies in C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades.