2017-08-03 26 views
1

Windows 10およびWindows Server 2016では、従来のLong Pathの問題に対するソリューションが導入されています。解決策は実装が簡単で、次のblog投稿で非常によく詳しく説明されています。手順に従うと、.NETコンソール/デスクトップアプリケーションで正常に動作します。しかし、何らかの理由で、ASP.NET Webアプリケーションから同じコードを実行すると、私はまだ同じ古典的なものが得られますSystem.IO.PathTooLongException例外がスローされます.NET System.IO.PathTooLongException Webアプリケーション

コードは:

私が言及したよう
Directory.CreateDirectory(longPath); 

、コードは、コンソールアプリケーションで正常に動作しますが、ASP.NETのWebサイトのアプリケーションに障害が発生しました。ウェブサイトのweb.configファイルには、次のものが含まれます。

<?xml version="1.0"?> 
<configuration> 
    <runtime> 
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false"/> 
    </runtime> 
</configuration> 

およびアプリケーションマニフェストファイル上のブログのリンクで説明したように。

+1

関連、HTTPSの可能な複製を持っていることに注意してください: //stackoverflow.com/questions/40722086/uselegacypathhandling-is-not-loaded-properly-from-app-config-runtime-elementリンクされた質問に回避策があるように見えます。 – bradbury9

+1

[UseLegacyPathHandlingがapp.configランタイム要素から正しく読み込まれていません](https://stackoverflow.com/questions/40722086/uselegacypathhandling-is-not-loaded-properly-from-app-config-runtime-element) – bradbury9

+0

ありがとう@ bradbury9、それはPOCの問題を解決しています。しかし、プロダクションプロジェクトは.NET 4.5.1に基づいており、これにはソリューションを適用するAppContextクラスがありません。何か案が? – shimiz

答えて

2

@ bradbury9が私に似た問題を指摘してくれたので、アプリケーションが実行時にスイッチのロングパス遮断設定を読み込めなかったことを確認しました。さらに、.NET 4.5.1に基づいたアプリケーションのバージョンでは、AppContext classを使用して、目的のスイッチをプログラムで手動で設定することは不可能です。

ソリューション:

ASP.NET Webアプリケーションの場合、以下の.NET 4.6.1またはに基づいては、.NET 4.6.2は、アプリケーションを実行するマシンにインストールされていることを確認し、以下を追加します属性targetFramework="4.6.2"httpRuntimeの設定です。

例:

<system.web> 
    <httpRuntime targetFramework="4.6.2" /> 
    <compilation targetFramework="4.5.1" /> 
</system.web> 

*長いパス、などのWindows Server 2016およびWindows 10をサポートしているWindowsは、すでに.NET 4.6.2がインストールさ

+0

喜んで;-) – bradbury9

関連する問題