ASP.NET プロジェクトで \bin\roslyn ディレクトリが生成される (\bin\roslyn ディレクトリが生成されないようにする)
ASP.NET プロジェクトで \bin\roslyn ディレクトリが生成される現象について紹介します。
動作
Visual Studio 2015 では、ASP.NETプロジェクトを作成してビルドすると、"bin"ディレクトリ内に"roslyn"ディレクトリが生成されます。
roslyn ディレクトリ内には、csc.exe vbc.exe などのコンパイラのファイルが配置されます。
"\bin\roslyn"ディレクトリのファイルを配置せずに ASP.NETアプリケーションを実行した場合、下図の csc.exe が見つからないといったエラーが発生する場合があります。
方法1:Microsoft.CodeDom.Providers.DotNetCompilerPlatform をアンインストールする
ASP.NET プロジェクトで \bin\roslyn ディレクトリが生成されないようにする方法です。
[ツール]メニューの[NuGet パッケージマネージャー]の[パッケージ マネージャー コンソール]メニューをクリックし、NuGet パッケージマネージャーコンソールを表示します。

NuGet パッケージマネージャーコンソールで下記のコマンドを実行します。
Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
または
Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform (プロジェクト名)
Microsoft.CodeDom.Providers.DotNetCompilerPlatform パッケージのアンインストールが実行されます。
アンインストール後にビルドすると、binディレクトリ内に"roslyn"ディレクトリは作成されない状態になります。
方法2:roslyn ディレクトリ内のプログラムの参照をしないための処理
\bin\roslyn
ディレクトリのファイルの参照は余分なため、
\bin\roslyn
ディレクトリのファイルを参照せずに実行したい場合があります。
Visual Studioを起動し、プロジェクトを開きます。
プロジェクトのソリューションエクスプローラウィンドウを表示します。プロジェクトの[参照]ノードを開きます。
参照されているアセンブリの中から"Microsoft.CodeDom.Providers.DotNetComplierPlatform"をクリックして選択します。選択後右クリックしポップアップメニューを表示します。メニューの[削除]を選択し、"Microsoft.CodeDom.Providers.DotNetComplierPlatform"を参照から外します。
Web.config の変更
変更前
<?xml version="1.0" encoding="utf-8"?>
<!--
ASP.NET アプリケーションの構成方法の詳細については、
http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2"/>
<httpRuntime targetFramework="4.5.2"/>
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
</configuration>
変更後
compilers タグによる、コンパイラへの参照を削除します。
<?xml version="1.0" encoding="utf-8"?>
<!--
ASP.NET アプリケーションの構成方法の詳細については、
http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2"/>
<httpRuntime targetFramework="4.5.2"/>
</system.web>
</configuration>
packages.config の変更
変更前
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" />
</packages>
変更後
package タグを削除し、"Microsoft.CodeDom.Providers.DotNetCompilerPlatform"への参照と、"Microsoft.Net.Compilers"への参照を削除します。
<?xml version="1.0" encoding="utf-8"?>
<packages>
</packages>
削除後、配置すると、
\bin\roslyn
ディレクトリのファイルが無くてもASP.NETアプリケーションが動作します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用