medium-trustに関するこの MSDN の記事によると、 medium-trust の下で:
FileIOPermission は制限されています。これは、アプリケーションの仮想ディレクトリ階層内のファイルにのみアクセスできることを意味します。アプリケーションには、アプリケーションの仮想ディレクトリ階層に対する読み取り、書き込み、追加、およびパス検出のアクセス許可が付与されます。
ただし、現在のホスティング プロバイダーは中程度の信頼でアプリケーションを実行しており、アプリケーションのルート フォルダー内のファイルを読み書きしようとすると、access to path 'myfile.xml' deniedエラーが発生します。
このファイルは、次のコードを使用して読み取られます
XElement file = XElement.Load(HttpContext.Current.Server.MapPath("~/myfile.xml"));
完全な更新エラー:
パス「C:\WebSites\mywebsite\myfile.xml」へのアクセスが拒否されました。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.UnauthorizedAccessException: パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。
ASP.NET は、要求されたリソースへのアクセスを許可されていません。リソースへのアクセス権を ASP.NET 要求 ID に付与することを検討してください。ASP.NET には、アプリケーションが偽装されていない場合に使用されるベース プロセス ID (通常、IIS 5 または IIS 6 および IIS 7 のネットワーク サービスの {MACHINE}\ASPNET、および IIS 7.5 の構成済みアプリケーション プール ID) があります。アプリケーションが を介して偽装している場合、ID は匿名ユーザー (通常は IUSR_MACHINENAME) または認証された要求ユーザーになります。
ファイルへの ASP.NET アクセスを許可するには、エクスプローラーでファイルを右クリックし、[プロパティ] を選択して、[セキュリティ] タブを選択します。[追加] をクリックして、適切なユーザーまたはグループを追加します。ASP.NET アカウントを強調表示し、必要なアクセスのボックスをオンにします。
ソース エラー:
現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタックトレース:
[UnauthorizedAccessException: パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。]
System.IO.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) +12892935 System.IO.FileStream.Init(String path, FileMode モード、FileAccess アクセス、Int32 権限、Boolean useRights、FileShare 共有、Int32 bufferSize、FileOptions オプション、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath) +2481
System.IO.FileStream..ctor(String パス、FileMode モード、 FileAccess アクセス、FileShare 共有、Int32 bufferSize、FileOptions オプション、String msgPath、Boolean bFromProxy) +229 System.IO.FileStream..ctor(String パス、FileMode モード、FileAccess アクセス、FileShare 共有) +102
System.Xml.XmlWriterSettings.CreateWriter(String outputFileName) +5224496
System.Xml.Linq.XElement.Save(String fileName, SaveOptions オプション) +108
mesoBoard.Services.SiteConfig.UpdateCache() +1971 mesoBoard.Web.MvcApplication.OnApplicationStarted( ) +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start() +604[HttpException (0x80004005): パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext コンテキスト、HttpApplication アプリ) +3985477 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS( IntPtr appContext、HttpContext コンテキスト、MethodInfo[] ハンドラー) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状態、MethodInfo[] ハンドラー、IntPtr appContext、HttpContext コンテキスト) +325 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext コンテキスト) ) +407 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375[HttpException (0x80004005): パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext コンテキスト) +11524352
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext コンテキスト) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr、HttpContext コンテキスト) +4782309