Pergunta sobre razor, asp.net, c#, portable-class-library, .net-4.5 – Biblioteca de classes portátil no MVC 4 / Razor com o Visual Studio 2012 RC?

40

Desde que trabalhamos com o Visual Studio 2012 RC, obtemos um HttpCompileException ao usar uma classe de uma biblioteca de classes portátil (.net 4.5 & metro profile) em uma visualização simples.

Exceção: (alemão para inglês traduzido no google, desculpe)

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)
...

Estrutura da solução:

Biblioteca de Classes Portátil (.net 4.5 e perfil metro)public class User {...}MVC 4 (.net 4.5)Referência à biblioteca de classes portátilNavalha-vistaUsuário @model

Já que o Visual Studio 2012 RC adicionando referência "System.Runtime" não é mais possível.

Como solução alternativa, você pode alterar a biblioteca de classes portátil para o Silverlight 5, além do estilo .NET 4.5 e Metro? Daniel Plaisted

Sua resposta

1   a resposta
60

No arquivo Views \ Web.config, adicione o seguinte código sob o<system.web> seção:

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

Há um monte de outros conjuntos que você também pode precisar fazer referência, dependendo de quais tipos seu código portátil está usando. Você pode adicionar cada um deles ao encontrar o erro ou adicionar a lista completa de conjuntos emC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades.

Dependendo do que você está fazendo em seu projeto, você também pode precisar adicionar a mesma linha na raizWeb.Config joshcomley
@WetNoodles Obrigado. Engraçado, se você seguir o link no blog de volta ao SO é a minha pergunta. Luke Puplett
Por que isso funciona? Luke Puplett
Isso resolveu um problema semelhante para mim usando System.Collections.Immutable aboy021
@LukePuplett meio que tarde, mas aqui está uma boa explicaçãolyalin.com/2014/04/25/… Wet Noodles

Perguntas relacionadas