web-dev-qa-db-ja.com

csc.exeファイルが含まれているsmarterasp.netでWebサイトを公開する際の問題

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でこの問題を解決するにはどうすればよいですか?

43

数時間の研究の後、私は解決策を思いつきました。

.NET 4.5バージョン以降、Roslynコンパイルがデフォルトのコンパイル方法です。これは、.NET 4.5を使用してWebフォームまたはMVCのいずれかのWebアプリケーションを作成する場合、このRoslyn csc.exeコンパイルがプロジェクトにプリインストールされることを意味します。

基本的に、私が必要としたのは、Roslynまたは.exeファイルなしでプロジェクトをコンパイルしてデプロイすることでした。

だからここに私のために働いたソリューションがあります。コードを変更することなく、Roslynなしでデプロイできます。

  1. NuGetパッケージマネージャーウィンドウを開く
  2. uninstall Microsoft.CodeDom.Providers.DotNetCompilerPlatformパッケージおよび再構築して再公開します。 (このアンインストールでは、web.configファイルからCodeDom構成も削除されます。)

これで目的が解決します。基本的に、binフォルダー内にcsc.exe、vbc.exeファイルは生成されません。

私もそれがあなたのために働くことを願っています!

86

Smarter ASPでこの問題が発生しました。コントロールパネルのブラウザーファイルマネージャーで、ビンの「Roslyn」フォルダーに移動し、.netアクセス許可を読み取り/書き込みに設定します。それでうまくいきました。

19
James Sullivan

Roslyn codegenを実際に保持したい場合は、アプリケーションのbinフォルダーにアクセス許可を設定して、ApplicationPoolユーザーに読み取りと実行を許可するだけです。

これは、フォルダープロパティダイアログの[エクスプローラーセキュリティ]タブを使用して行いましたが、次のようなこともできるはずです。

icacls PATH_TO_SERVICE_BIN /grant "ApplicationPoolUser":(OI)(CI)RX
17
Eris

パブリッシュウィンドウで「プリコンパイル済みサイトを更新可能にする」のチェックを外すと、ソリューションが見つかりました。 enter image description here

13
kpr

Web.configからcodedomセクションを削除するだけで、問題は解決します。

10

VS2015でWebデプロイを介してASP.net 4.5.2 SPAを公開すると、OPと同じ問題が発生しました。

動作することがわかった解決策は、Nugetパッケージを削除することでした"Microsoft.CodeDom.Providers.DotNetCompilerPlatform"

あるいは、system.codedom compiler configセクションをWeb.configファイルから削除するだけで、同じ効果が得られます。

10
kbarry

以下に示すように、Smarterasp.netファイルマネージャーで/binフォルダーのrwアクセスを設定し、アプリを再起動します。

See this image for details

9
GuChil

これがどのように機能するかを示します。

  1. コントロールパネルで、[セキュリティマネージャー]> [.EXEファイルを許可する]に移動します。
  2. 値をオンに設定します(これにより、.exeファイルをアップロードできます)
  3. あなたのWeb.config、完全な信頼を設定します(これにより、それらを実行できます)

    <configuration> 
      <system.web> 
        <trust level="Full" /> 
      </system.web> 
    </configuration> 
    
  4. 公開設定で「公開中のプリコンパイル」を有効にしますが、詳細プリコンパイル設定(このオプションの横にある「構成」リンク)で「プリコンパイルされたサイトを更新可能にする」を無効にします。

1
aethercowboy

同じエラーが発生し、ホスティングディレクトリのアクセス許可(読み取り/書き込み/削除)を有効にして解決しました。

Webサイトの機能をサポートするために.exeファイルのアップロードを許可するSmarterAsp.Netが必要な場合は、可能です。コントロールパネルに移動して、[。exeファイルの許可]をオンにします。以下を参照してください。

enter image description here

私の場合、Asp.Net Core Webサイトをホストしたかったため、これを実行する必要がありました。これには絶対に.exeファイルが必要です:-)

1
Ron C

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

私はこのメッセージボックスを手に入れました:

enter image description here

cMDウィンドウで次の行が続きます。

アクセスが拒否されました。

Windowsファイルエクスプローラーでファイルを調べると、csc.exeのサイズがゼロバイトであることがわかりました。

展開スクリプトのどの段階でこれが起こるかはわかりませんが、0バイトサイズのcsc.exeを実際の動作するcsc.exeに置き換えた後、すべてが正常に動作します。

0
Uwe Keim

Nugetパッケージの更新Microsoft.CodeDom.Providers.DotNetCompilerPlatform最新バージョンへ(その時点で)2.0.1フォルダーにアクセス許可を付与したり、コンパイラーを削除したりすることなく、この問題を解決しました。

0
Ahmed Mansour

上記の解決策は私にとってはうまくいきませんでしたし、最近はroslynがオプションではないため、正しくありません。

うまくいったのは、プールアカウントに、Webアプリケーションのrootフォルダーに対するread&executeパーミッションがあることを確認することでした。 Webアプリが使用するプール名を検索し、次にアプリケーションプール->pool name->詳細設定-> ID。

私のVPSホストは、次のようにホスティングに非標準のディレクトリを使用します。

c:\home\web.app.name\wwwroot

web.app.nameフォルダーには許可が必要でした。

0