views:

398

answers:

3

I'm trying to deploy ASP.NET MVC 2 project (VS2010) to Win Server 2008 R2

It works perfectly on dev machine. But strange error occurs at Server 2008 R2: When .ascx file has header that uses generic type:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>" %>

Server reports Could not load type 'System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>'.

But when I declare somewhere in .cs file type like

public class AA : System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>
{
}

and use it instead in <%@ Control header. Then it works as it should.

Am I missing something?

UPDATE

I deploy app in two steps (on server):

  1. Rebuild VS solution from source using command-line MSBuild (for .NET 4)
  2. Launch custom msbuild task (have publih.msbuild file for this) that executes two targets: Targets="ResolveReferences;_CopyWebApplication"
A: 

Could be messed up ASP.NET MVC installation on the server. I suggest uninstalling MVC and reinstalling with Web Platform Installer. I had problems too when I installed using the downloaded setups files, so I removed everything and went with the Web Platform Installer.

Another suggestion would be to make a new fresh server box - can be virtual - and try there.

Also rebuilding solution could help and checking out that web.config is ok too.

Also try if MvcDiagnostics.aspx tool shows any abnormalities. Check out this blog post

Let us know if anything helps.

mare
+2  A: 

I looks that the view engine has problems compiling strongly typed base class in Inherit attribute. I had the same issue and updating the "pages" section of Web.Config to this helped:

 <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
          <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
        <!-- rest of your pages section -->
</pages>
PanJanek
Yes, same, but for MVC 2
Evgenyt
Oh yes - for MVC2 it should be "Versions=2.0.0.0". Teoretically - if the MVC project is properly build and published this tweaking of "pages" section is not neccesary. In practice, when migrating between different versions and builds of MVC it's the easiest way to repair the project
PanJanek
A: 

Could not find why but the following helped (web.config):

<pages
         pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

Initially found similar for asp.net mvc 1

Evgenyt
There's something wrong with your project or its build because that is not required in web.config for ASP.NET MVC application to work either locally or on the server.
mare