none
アセンブリ(DLL)のロード RRS feed

  • 質問

  • お世話になります。

    開発環境:VS2008 .NETFramework3.5

    FileReader.DLLを作成して、イントラネットに配置しました。(自分のマシンのIISですが・・・)
    ホスト側のソースとApp.configは、下のほうの内容にしています。これは問題なく動作しております。

    問題は、同じDLLの同じ名前空間(FileReaders)にあるクラス(たとえばFileReaderEx)を、同じようにホスト側でインスタンスの生成を行うようにしたのですが、
    実行時に、

    「ハンドルされていない例外: System.TypeLoadException: アセンブリ 'FileReader, Vers・・・・
     ion=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxx' から型 'FileReaders.FileReaderEx' を読み込めませんでした。」 
     と例外エラーが発生しました。

    いろいろ自分なりに調査してみた結果ですが、

    app.configの<codeBase>でのDLL参照先を、
    http://localhost/・・・/FileReader.dllにするとインスタンスは生成されました。
    ※ローカルパス(c:\...\FileReader.dll)でも問題なくインスタンスは生成されました。

    また、 <codeBase>は変更せずに、<asm:assemblyIdentity name="FileReaderEx" ・・・/> とクラス名にしてみたところインスタンスが生成されました。


    この辺の仕様がわかりません。
    教えてください。



    // ホスト側のソース
    using FileReaders;

    void main()
    {
       FileReader fr = new FileReader();
    }

    // ホスト側のapp.config
      <runtime xmlns:asm="urn:schemas-microsoft-com:asm.v1">
        <asm:assemblyBinding>
          <asm:dependentAssembly>
            <asm:assemblyIdentity name="FileReader"
                culture="neutral"
                publicKeyToken="xxxxxxxxx" />
            <asm:codeBase version="1.0.0.0" href="http://machine-name/webdav/FileReader.dll" />
          </asm:dependentAssembly>
        </asm:assemblyBinding>
      </runtime>

    2009年11月17日 9:16

回答

すべての返信

  • 上記訂正です。

    調査した結果の中で、assemblyIdentityをクラス名にして成功したくだりは、ローカルのDLLを参照しておりました。
    勘違いしておりました。すみません。

    2009年11月17日 9:22
  • またしても自己レスなんですが、

    http:// からロードしたアセンブリってローカルのどこかでキャッシュされているのでしょうか。
    キャッシュされているとしたらクリア方法があればと思いますが・・・

    教えてください。
    2009年11月18日 4:01
  • SDK にパスが通っている状態 (Visual Studio Command Prompt 等) から mage -cc です。
    • 回答としてマーク OTAKA 2009年11月25日 0:55
    2009年11月19日 3:48
  • ご返事ありがとうございます。

    キャッシュがあったみたいで、クリアすると問題なく動作しました。
    2009年11月25日 0:55