2

C# と ASP.NET MVC 4 (モバイル テンプレート アプリケーション) を使用して、Visual Studio 2010 で Web アプリケーションを作成しました。Visual Studio で実行すると、問題なく動作するようになりました。しかし、今では自分のサイトでホストしているため、次のエラーが発生し続けます。

「/test」アプリケーションでサーバー エラーが発生しました。

要求されたタイプの 1 つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Reflection.ReflectionTypeLoadException: 1 つ以上の要求された型を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

[ReflectionTypeLoadException: Unable to load one or more of the requested types.      Retrieve the LoaderExceptions property for more information.]
System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) +0
System.Reflection.RuntimeModule.GetTypes() +4
System.Reflection.Assembly.GetTypes() +78
System.Data.Entity.ModelConfiguration.Mappers.TypeMapper.<.ctor>b__1(Assembly a) +11
System.Linq.<SelectManyIterator>d__14`2.MoveNext() +238
System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) +395
System.Data.Entity.ModelConfiguration.Mappers.TypeMapper..ctor(MappingContext mappingContext) +253
System.Data.Entity.DbModelBuilder.MapTypes(EdmModel model) +114
System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) +112
System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +59
System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +62
System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +117
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +453
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +18
System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +56
System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +15
System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +67
System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) +150
System.Data.Entity.DbSet`1.Add(TEntity entity) +42
PrayerTimes.Models.MosqueRepository.AddError(String error) in MosqueRepository.cs:74
PrayerTimes.Controllers.MosqueController.Index() in MosqueController.cs:57
lambda_method(Closure , ControllerBase , Object[] ) +40
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +188
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()+28
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult syncResult) +29
System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +59
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +240
System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +31
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +23
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +128
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50

System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +26 System.Web.Mvc.<>c_ DisplayClass1d.b _18(IAsyncResult asyncResult) +14 System.Web.Mvc.Async.<>c_ DisplayClass4.b _3(IAsyncResult ar) +25 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +55 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +41 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25 System.Web.Mvc.Async.WrappedAsyncResult1.End() +55 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +28 System.Web.Mvc.Controller.System.Web. Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.<>c_ DisplayClass8.b _3(IAsyncResult asyncResult) +28 System.Web.Mvc.Async.<>c_ DisplayClass4.b_3(IAsyncResult ar) +25 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +30 System.Web.Mvc.MvcHandler.System.Web .IHttpAsyncHandler.EndProcessRequest(IAsyncResult 結果) +9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970141 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

私は解決策をオンラインで検索しようとしましたが、多くのことに出会いましたが、試してみましたが、何もうまくいかないようです. 解決策の1つはこれを使用することでした:

try
{
 //The code that causes the error goes here.
}
catch (ReflectionTypeLoadException ex)
{
StringBuilder sb = new StringBuilder();
foreach (Exception exSub in ex.LoaderExceptions)
{
    sb.AppendLine(exSub.Message);
    if (exSub is FileNotFoundException)
    {
        FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
        if(!string.IsNullOrEmpty(exFileNotFound.FusionLog))
        {
            sb.AppendLine("Fusion Log:");
            sb.AppendLine(exFileNotFound.FusionLog);
        }
    }
    sb.AppendLine();
 }
 string errorMessage = sb.ToString();
 //Display or log the error based on your application.
 }

データベースにエラー テーブルを作成し、上記のコードのエラーをテーブルに追加しようとしましたが、うまくいきませんでした。助けてください。どうもありがとう

4

2 に答える 2

5

多くの場合、ホスティング中の MVC エラーは、MVC がサーバーにインストールされていないことを意味するため、必要な DLL の 1 つをロードできません。

これを回避するには、すべての DLL をアプリの bin ディレクトリにコピーします。

プロジェクト内の MVC 要素 (System.Web.Mvc、System.Web.Routing など) の参照で "Copy Local" フラグを true に設定すると、公開用にそれらが bin ディレクトリにコピーされます。 . もっと簡単な方法がありますが、ショートカットを忘れてしまいました。

編集

ここにあります-展開可能な依存関係。ただし、コメントが正確な場合、この機能は VS2010 にありましたが、VS2012 で削除されたため、「ローカルにコピー」する必要があります。

于 2013-04-10T20:08:45.803 に答える
2

Web サイト プロジェクトがあり、コンピューターですべて問題なく、ホストされている Web サイトで一部が正しくない場合は、次の作業を行うことをお勧めします。

  • プロジェクトの .net フレームワーク バージョンと、ホスト上の Web サーバーの .net フレームワーク バージョンを確認しますそれらは等しくなければなりません。

  • プロジェクト内のすべての参照ファイルをホストされた Web サイトにコピーします (ローカル ビン ---to---> ホストされたビン)

    • この作業では、プロジェクト内の各参照の「Copy To Local」プロパティを「TRUE」に設定できます。たとえば、MVC プロジェクトの場合、次のガイド ページに従うことができます: 「ASP.NET MVC アプリケーションのデプロイ」

    • 参照ファイルのすべての依存関係を見つけて、それらをホストの bin フォルダーにコピーします ( VS の[配置可能な依存関係の追加] 機能を使用できます)。

  • ホスト上のファイルとフォルダーの読み取りと書き込みのアクセス許可を確認します (一時フォルダー、ログ フォルダー、アップロード フォルダーなど)。

  • プロジェクトを再度チェックしてローカル アドレスを変更し、相対アドレスに変換します(e:\a\b\website\images\1.jpg... =to=> images\1.jpg OR http:// localhost/images/ 1.jpg =to=> 画像/1.jpg)

  • 一部の基本設定 (.net バージョンなど) を変更すると、ホスト上の一部のサービス(Web サーバーなど) を再起動します。

  • いくつかのCOM 参照を使用している場合は、それらが同じバージョンのターゲット マシンにインストールされていることを確認してください。

編集:

    <system.web>
        <securityPolicy>
              <trustLevel name="Full" policyFile="internal"/>
        </securityPolicy>
    </system.web>

編集: この問題では、次の方法でコードをテストできます (@BenGripka による):

このエラーには、真の特効薬の答えはありません。重要なのは、問題を理解するためのすべての情報を入手することです。ほとんどの場合、動的に読み込まれたアセンブリに参照アセンブリがありません。そのアセンブリは、アプリケーションの bin ディレクトリにある必要があります。

このコードを使用して、不足しているものを特定します。

using System.IO;
using System.Reflection;

try
{
    //The code that causes the error goes here.
}
catch (ReflectionTypeLoadException ex)
{
    StringBuilder sb = new StringBuilder();
    foreach (Exception exSub in ex.LoaderExceptions)
    {
        sb.AppendLine(exSub.Message);
        if (exSub is FileNotFoundException)
        {
            FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
            if(!string.IsNullOrEmpty(exFileNotFound.FusionLog))
            {
                sb.AppendLine("Fusion Log:");
                sb.AppendLine(exFileNotFound.FusionLog);
            }
        }
        sb.AppendLine();
    }
    string errorMessage = sb.ToString();
    //Display or log the error based on your application.
}
于 2013-04-10T21:48:09.070 に答える