私はリフレクションを使用して、NetTierを使用して生成された異なるクラスのメソッドを呼び出すアプリケーションを持っています。IIS7でのアセンブリの反映
Assembly.GetExecutingAssembly().CodeBase
としてクラスをロードする:
Assembly.LoadFrom(<Assembly Path using above>.dll).GetType(<className>)
これは、いくつかの動作しているようですが、私は国会実行使用して取得することにより、NetTiersサービスアセンブリをロードしてることを行うために
アセンブリの読み込みに失敗する場合があります。
エラーアセンブリf ROMの実行:C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 ASP.NETの一時ファイル\サービス\ \ 21d6c367 \ aa208bcd \アセンブリ\ DL3 \ e825b934 \ 00f26fab_a39ecc01 \ .dllがクラス:
とスタックトレース:
System.IO.FileNotFoundException:ファイルまたはアセンブリ「ファイルをロードできませんでした:/// C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 ASP.NETの一時ファイル\サービス\ \ 21d6c367 \ aa208bcd \ assembly \ dl3 \ e825b934 \ 00f26fab_a39ecc01 \ .dll 'またはその依存関係の1つです。システムは、指定されたファイルを見つけることができません。ファイル名: 'file:/// C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ services \ 21d6c367 \ aa208bcd \ assembly \ dl3 \ e825b934 \ 00f26fab_a39ecc01 \ .dll'
System.Reflection.RuntimeAssembly._nLoad(のAssemblyNameファイル名、文字コードベース、証拠assemblySecurity、RuntimeAssembly locationHint、StackCrawlMark & stackMark、ブールthrowOnFileNotFound、ブールforIntrospection、ブールsuppressSecurityChecks)System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(のAssemblyName assemblyRef、証拠assemblySecurity、ATでStackCrawlMark & stackMark、イントロスペクションのブール値、ブールsuppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFi System.Reflection.Assembly.LoadFrom(文字列assemblyFile)でル、証拠securityEvidence、バイト[]ハッシュ値、AssemblyHashAlgorithm hashAlgorithm、ブールforIntrospection、ブールsuppressSecurityChecks、StackCrawlMark & stackMark)
WRN:アセンブリは、ログを結合が投入されますオフ。アセンブリバインドの失敗のログを有効にするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)を1に設定します。注:アセンブリバインドの失敗のログには、パフォーマンス上のペナルティがあります。この機能を無効にするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog]を削除します。
アセンブリからクラスをロードするには、より良い方法がありますか、他のクラスではこのエラーが発生するようなものがありませんか? IIS7を使用してアプリケーションを実行しています。あなたはDLLの名前を指定していないことを確認することができ、指定されたパスから
アセンブリへのパスに.dllを指定しています。 – Steve
@Steve "匿名でホストされた"アセンブリを介して、いくつかの動的コードからの呼び出しです。または、少なくとも実際の呼び出しがインライン展開されています。ただし、クラス名がアセンブリ修飾されている場合、まずアセンブリをロードする必要はありませんそうでなければ、このパターンは信頼できず、より安全なものが必要ですアセンブリを事前に知る方法。 'GetEntryAssembly()'はより信頼できますが、必ずしも正しいとは限りません。 –