Microsoft Visual Studio 2015を使用しています。C#連絡先フォームを使用して簡単なWebサイトを構築しました。 localhostでコンパイルして実行すると、まったく問題なく動作します。ただし、(smarterasp.netで)公開しようとすると、エラーが発生します。
[Win32Exception(0x80004005):アクセスが拒否されました]
[ExternalException(0x80004005):プログラムを実行できません。実行されたコマンドは「..\bin\roslyn\csc.exe」でした
Smarterasp.netに連絡したところ、.exeファイルを許可しないと言われました。サーバーからftpでcsc.exeを削除しようとしましたが、削除するとエラーが発生します。
ファイル "..\bin\roslyn\csc.exe"が見つかりませんでした。
このWebサイトを公開できるように、プロジェクトに含まれようとしているcsc.exeでこの問題を解決するにはどうすればよいですか?
数時間の研究の後、私は解決策を思いつきました。
.NET 4.5バージョン以降、Roslynコンパイルがデフォルトのコンパイル方法です。これは、.NET 4.5を使用してWebフォームまたはMVCのいずれかのWebアプリケーションを作成する場合、このRoslyn csc.exeコンパイルがプロジェクトにプリインストールされることを意味します。
基本的に、私が必要としたのは、Roslynまたは.exeファイルなしでプロジェクトをコンパイルしてデプロイすることでした。
だからここに私のために働いたソリューションがあります。コードを変更することなく、Roslynなしでデプロイできます。
これで目的が解決します。基本的に、binフォルダー内にcsc.exe、vbc.exeファイルは生成されません。
私もそれがあなたのために働くことを願っています!
Smarter ASPでこの問題が発生しました。コントロールパネルのブラウザーファイルマネージャーで、ビンの「Roslyn」フォルダーに移動し、.netアクセス許可を読み取り/書き込みに設定します。それでうまくいきました。
Roslyn codegenを実際に保持したい場合は、アプリケーションのbinフォルダーにアクセス許可を設定して、ApplicationPoolユーザーに読み取りと実行を許可するだけです。
これは、フォルダープロパティダイアログの[エクスプローラーセキュリティ]タブを使用して行いましたが、次のようなこともできるはずです。
icacls PATH_TO_SERVICE_BIN /grant "ApplicationPoolUser":(OI)(CI)RX
Web.configからcodedomセクションを削除するだけで、問題は解決します。
VS2015でWebデプロイを介してASP.net 4.5.2 SPAを公開すると、OPと同じ問題が発生しました。
動作することがわかった解決策は、Nugetパッケージを削除することでした"Microsoft.CodeDom.Providers.DotNetCompilerPlatform"。
あるいは、system.codedom compiler configセクションをWeb.configファイルから削除するだけで、同じ効果が得られます。
以下に示すように、Smarterasp.netファイルマネージャーで/bin
フォルダーのrwアクセスを設定し、アプリを再起動します。
これがどのように機能するかを示します。
あなたのWeb.config
、完全な信頼を設定します(これにより、それらを実行できます)
<configuration>
<system.web>
<trust level="Full" />
</system.web>
</configuration>
公開設定で「公開中のプリコンパイル」を有効にしますが、詳細プリコンパイル設定(このオプションの横にある「構成」リンク)で「プリコンパイルされたサイトを更新可能にする」を無効にします。
同じエラーが発生し、ホスティングディレクトリのアクセス許可(読み取り/書き込み/削除)を有効にして解決しました。
tl; dr:csc.exeのサイズが0バイトでないことを確認します。
長い回答
さらに別の原因と解決策を追加するには:私の場合、ブラウザに次のような黄色の死の画面が表示されました。
「/」アプリケーションのサーバーエラー。
コンパイルエラー
説明:この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。
コンパイラエラーメッセージ:コンパイラはエラーコード255で失敗しました。
c:\ windows\system32\inetsrv> C:\ inetpub\wwwroot\bin\roslyn\csc.exe/t:library/utf8output/nostdlib + ...
バージョン情報:Microsoft .NET Frameworkバージョン:4.0.30319; ASP.NETバージョン:4.7.2558.0
調査の結果、CMDウィンドウ内でcsc.exeを実行して呼び出しを分離しました。
c:\inetpub\wwwroot\bin\roslyn\csc.exe
私はこのメッセージボックスを手に入れました:
cMDウィンドウで次の行が続きます。
アクセスが拒否されました。
Windowsファイルエクスプローラーでファイルを調べると、csc.exeのサイズがゼロバイトであることがわかりました。
展開スクリプトのどの段階でこれが起こるかはわかりませんが、0バイトサイズのcsc.exeを実際の動作するcsc.exeに置き換えた後、すべてが正常に動作します。
Nugetパッケージの更新Microsoft.CodeDom.Providers.DotNetCompilerPlatform
最新バージョンへ(その時点で)2.0.1
フォルダーにアクセス許可を付与したり、コンパイラーを削除したりすることなく、この問題を解決しました。
上記の解決策は私にとってはうまくいきませんでしたし、最近はroslynがオプションではないため、正しくありません。
うまくいったのは、プールアカウントに、Webアプリケーションのrootフォルダーに対するread&executeパーミッションがあることを確認することでした。 Webアプリが使用するプール名を検索し、次にアプリケーションプール->pool name->詳細設定-> ID。
私のVPSホストは、次のようにホスティングに非標準のディレクトリを使用します。
c:\home\web.app.name\wwwroot
web.app.nameフォルダーには許可が必要でした。