emu雑記

C#erな人が書いているブログです。最近、javaを始めました。なんかいろいろやってます。

ASP.NETのアプリケーション構成について

本日は久しぶりに.NETの話題です。

レンタルサーバーで以前動いていたASP.NET WebAPIが突然動かなくなりました…。

動いていたときから、動かなくなった間にやったことは…っと考えていたら、その親階層にASP.NET MVCのアプリケーションを配置した!!

構成はこんな感じ

webroot[ASP.NET MVC]
|-Views
|-Scripts
|-Images
|-Content
|-bin
|-Application_Folder[ASP.NET WebAPI]

やりたかったことは

http://www.emu717171.com

ASP.NET MVCのページにしておいて、

http://www.emu717171.com/Application

ASP.NET WebAPIにしたかったのです。

今回、調べてみるとweb.configの継承という仕組みが悪さしていました。

↓ここに載ってます。
ASP.NET 構成ファイルの階層と継承

ASP.NET MVC(親フォルダー)のweb.configの設定が、ASP.NET WebAPI(子フォルダー)の設定に反映されちゃってる感じかな。

これを無効にするには、親フォルダー側のWeb.configに

<location path="." inheritInChildApplications="false">

のタグが必要でした。

今回は完全に独立させる構成だったので、一気に全部を囲んでみました。

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=301880
  -->
<configuration>
  <location path="." inheritInChildApplications="false">
    <configSections>
      <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
      <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>
    <connectionStrings>
      <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-WebApplication3-20140810035909.mdf;Initial Catalog=aspnet-WebApplication3-20140810035909;Integrated Security=True"
        providerName="System.Data.SqlClient" />
    </connectionStrings>
    <appSettings>
      <add key="webpages:Version" value="3.0.0.0" />
      <add key="webpages:Enabled" value="false" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    <system.web>
      <authentication mode="None" />
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    </system.web>
    <system.webServer>
      <modules>
        <remove name="FormsAuthenticationModule" />
      </modules>
    </system.webServer>
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="v11.0" />
        </parameters>
      </defaultConnectionFactory>
      <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
    </entityFramework>
  </location>
</configuration>