Search code examples
.netasp.net-mvcasp.net-mvc-4asp.net-mvc-3web-config

How to share web.config file between MVC 3 and MVC 4 Project


I have a MVC 3.0 and MVC 4.0 Projects side by side

enter image description here

I did this for the resource sharing between two solutions. it is works fine when i change the config file. changes in details.

In MVC 3.

<assemblies>
  <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>

<pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>

When i remove the <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> MVC 4 is working fine. after i debug the project in MVC 3.0 it showing an error msg(The type or namespace name 'Ajax' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?) ) because of i remove the "System.Web.Mvc, Version=3.0.0.0" , if i have to run that means i have to place the refreance again. here i am doing everyting manually, is there is any way to automatic do this ?

For example, two xml files in server side i read that xml file and replace the config file.

Already Tried.

In MVC 4 project i used the WebConfigurationManager to remove the refreance it works , after i opened the MVC 3 it shows that error msg.


Solution

  • You could create a new build configuration for Mvc3 and run a pre-build event that will overwrite your web.config, it's an idea I've adopted from Hanselman.

    If you follow the link the only difference for your set up would be that you would have a config called

    Web.Config.Mvc3  (and possibly Web.Config.Mvc3Release)
    

    and leave Mvc as your default builds

    Web.Config.Debug
    Web.Config.Release