none
ilasm.exeでビルドしたアセンブリを参照したい RRS feed

  • 質問

  • 今ilasm.exeであるilコードをコンパイルしました。

    .assembly extern mscorlib { }
    .assembly ArrayBuilderAssemly { }
     .class public ArrayBuilder<T>
    extends [mscorlib]System.Object
    {
    }

    コマンドラインはVSのプロジェクトでプロジェクトのビルド前に実行するコマンドで

    "C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe" "$(ProjectDir)ArrayBuilder.il" /dll

    VSのC#プロジェクトには入っていますが実際にはC#コードはなく、上記のソースをテキストファイルでもち、コマンドラインを実行するためだけにVSに入れています。
    それで実際にdllが生成でき、IL Spyにより中身をみることもできています。
    このdllをC#プロジェクトの参照に入れました。
    参照したC#プロジェクトのソースは

     

    namespace ILコードのコンパイル {
        class Class1{
            public static void Main() {
                ArrayBuilder a;
            }
        }
    }
    

    実行すると、
    ファイルまたはアセンブリ 'ArrayBuilderAssemly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

    と実行されます。例外のFusionLogには

    === 事前バインド状態情報 ===
    ログ: ユーザー = kazuhiro-PC\kazuhiro
    ログ: DisplayName = ArrayBuilderAssemly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
     (Fully-specified)
    ログ: Appbase = file:///c:/users/kazuhiro/documents/visual studio 2010/Projects/ILコードのコンパイル/ILコードのコンパイル/bin/Debug/
    ログ: Initial PrivatePath = NULL
    呼び出しているアセンブリ: ILコードのコンパイル, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    ===
    ログ: このバインドは default の読み込みコンテキストで開始します。
    ログ: アプリケーション構成ファイルは見つかりませんでした。
    ログ: ホスト構成ファイル  を使用します。
    ログ: C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config からのコンピューター構成ファイルを使用します。
    ログ: 現時点でポリシーは参照に適用されません (プライベート、カスタム、部分的、または場所ベースのアセンブリ バインド)。
    ログ: 新しい URL file:///c:/users/kazuhiro/documents/visual studio 2010/Projects/ILコードのコンパイル/ILコードのコンパイル/bin/Debug/ArrayBuilderAssemly.DLL をダウンロードしようとしています。
    ログ: 新しい URL file:///c:/users/kazuhiro/documents/visual studio 2010/Projects/ILコードのコンパイル/ILコードのコンパイル/bin/Debug/ArrayBuilderAssemly/ArrayBuilderAssemly.DLL をダウンロードしようとしています。
    ログ: 新しい URL file:///c:/users/kazuhiro/documents/visual studio 2010/Projects/ILコードのコンパイル/ILコードのコンパイル/bin/Debug/ArrayBuilderAssemly.EXE をダウンロードしようとしています。
    ログ: 新しい URL file:///c:/users/kazuhiro/documents/visual studio 2010/Projects/ILコードのコンパイル/ILコードのコンパイル/bin/Debug/ArrayBuilderAssemly/ArrayBuilderAssemly.EXE をダウンロードしようとしています。
    
    と表示されます。
    まずやりたいことは最も単純なアセンブリをilasm.exeで作り、それを通常のC#(VB)プロジェクトに参照させたあと実行時に例外が発生しないようにしたいです。
    気をつけるべきことなどなにかありますでしょうか。

    • 編集済み 和和和 2012年1月13日 15:51
    2012年1月13日 15:47

回答

  • > ilasm.exe" "$(ProjectDir)ArrayBuilder.il" /dll

    アセンブリ名が間違っているだけでは? fusionlog も、パッと見、アセンブリが発見できないというエラーですよね。

    /output をつけるか、ソースファイルを ArrayBuilderAssembly.il にリネームすれば解決するかと思います。

     

    • 回答の候補に設定 山本春海 2012年1月31日 8:46
    • 回答としてマーク 山本春海 2012年2月23日 7:43
    2012年1月24日 4:37

すべての返信

  • > ilasm.exe" "$(ProjectDir)ArrayBuilder.il" /dll

    アセンブリ名が間違っているだけでは? fusionlog も、パッと見、アセンブリが発見できないというエラーですよね。

    /output をつけるか、ソースファイルを ArrayBuilderAssembly.il にリネームすれば解決するかと思います。

     

    • 回答の候補に設定 山本春海 2012年1月31日 8:46
    • 回答としてマーク 山本春海 2012年2月23日 7:43
    2012年1月24日 4:37
  • ローカル コピーを「する」にするとか?
    2012年1月24日 4:55