【Visual Studio】Web.configをビルド構成別に設定できるようにする
概要
仕事でインストーラを作成する際に、Web.configのcompilation debug="true"にしたままのことを指摘されたので、ビルド構成別にWeb.configの内容を設定できないか調べてみました。
やり方
.vbprojの編集
.vbprojの内容を編集するためにソリューションエクスプローラを開き、プロジェクトを右クリックしプロジェクトのアンロードを選択 すると、プロジェクト名(利用不可)となるので、これを右クリックし編集 プロジェクト名.vbprojを選択
開いた.vbproj内の <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" />を以下の記述に変更する
これはバージョンによってv15.0の部分が変わるかも…
code:1.vbproj.xml
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
さらに、終端の</Project>の前に以下の記述を追加する
code:2.vbproj.xml
<Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
以上の2項目を修正したらソリューションエクスプローラを開き、プロジェクト名(利用不可)を右クリックしプロジェクトの再読み込みを右クリックする
プロジェクト名(利用不可)が元のプロジェクトに戻れば.vbprojの編集完了
Webconfigの編集
ソリューションエクスプローラからWeb.configを右クリックしConfig変換を追加を選択
すると、Web.configの下にWeb.Debug.configとWeb.Release.configが生成される
生成されたファイルに以下の記述をコピペする
code:Web.Debug.config.xml
<?xml version="1.0" encoding="utf-8"?>
<system.web xdt:Transform="Replace">
<compilation debug="true" strict="false" explicit="true" targetFramework="4.6.1"/>
</system.web>
</configuration>
code:Web.Release.config.xml
<?xml version="1.0" encoding="utf-8"?>
<system.web xdt:Transform="Replace">
<compilation debug="false" strict="false" explicit="true" targetFramework="4.6.1"/>
</system.web>
</configuration>
これでDebugとReleaseと際にそれぞれのWeb.configの内容を参照しWeb.configに適応できるようになる
注意点
この方法は、コンパイル時にWeb.configが書き換わるので、Web.configを開いたまま実行すると警告が出るので、閉じて実行しなければならない