none
VS2008で作ったdllファイルをVS2003で参照する方法を教えてください。 RRS feed

  • 質問

  • OSはXP SP3のPCにVS2003とVS2008 をインストールしています。
    pop before smtpの関係でVS2008で作成したdllをVS2003で使いたいのですがうまくいきません。
    VS2008で作成したx2008.dllファイルをD:\dlltest フォルダにコピーして、
    VS2003のasp.netプロジェクトの参照設定の参照の追加で参照ボタンをクリックして
    D:\dlltest\x2008.dllを選択して[開く]をクリックすると[選択されたコンポーネント]に追加されているので
    OKをクリックすると、
    D:\dlltest\x2008.dllへの参照を追加できませんでした。これは有効なアセンブリまたはCOMコンポーネントではありません。拡張子’dll’をもつアセンブリまたは、
    COMコンポーネントのみ参照できます。ファイルアクセス可能で有効なアセンブリまたはCOMコンポーネントであることを確認してください。

    というメッセージが出てきます。

    VS2003で作成したASP.NetアプリはD:\web\に配置しておりIISの.Netのバージョンは1.1にしてあります。
    D:\dlltest\は特にIISの仮想ディレクトリにしておりません。

    ちなみに、VS2008で同じように参照したら問題なく参照の追加ができます。

    VS2008で作成したdllはVS2003では参照できないのでしょうか?
    どなたか、知恵をお貸しください。
    2009年6月26日 7:42

回答

  • VS2003 は .NET 1.1 向けのアセンブリを、VS2008 は .NET 2.0 ~ 3.5 向けのアセンブリを作成できます。
    .NET Framework は上位互換ですので、1.1 のホスト上に 2.0 以降の dll をロードすることはできないと思います。
    2009年6月26日 8:34

すべての返信

  • VS2003 は .NET 1.1 向けのアセンブリを、VS2008 は .NET 2.0 ~ 3.5 向けのアセンブリを作成できます。
    .NET Framework は上位互換ですので、1.1 のホスト上に 2.0 以降の dll をロードすることはできないと思います。
    2009年6月26日 8:34
  • 結論から、できません。
    バージョンの互換性 で説明されていますが、VS2008(.NET Framework 2.0~)で作成したdllはVS2003(1.0~1.1)では使用できません。
    余談ですが、VS2010(4.0)は2.0~と互換がある予定です。

    totojoさんへ
    上位互換と下位互換が逆かも。少なくともここの翻訳では。
    # でも上位互換って言いますよねぇ…。
    2009年6月26日 8:43
  • 本題からは逸れますが...
    totojoさんへ
    上位互換と下位互換が逆かも。少なくともここの翻訳では。
    # でも上位互換って言いますよねぇ…。

    おやっと思って原文にあたってみたところ、"backward and forward compatibility" という言葉で説明されていました。1.1 から 2.0 へは backward compatibility (後方互換性) があると。これは MSDN ライブラリの誤訳っぽいですね。

    後方互換=製品の新しいバージョンから見た場合の古いバージョンとの互換性
    下位互換=下位の製品から見た場合の上位の製品との互換性

    # Wikipedia によると、上位互換・下位互換と前方互換・後方互換は混乱しているのだそうで。
    # http://ja.wikipedia.org/wiki/%E4%B8%8A%E4%BD%8D%E4%BA%92%E6%8F%9B
    2009年6月26日 9:03
  • 本題とは外れますが・・・

    > pop before smtpの関係でVS2008で作成したdllをVS2003で使いたいのですがうまくいきません。

    .NET 1.1 のライブラリのみで実装することはできないのでしょうか? pop before smtp の pop の
    部分だけなら TcpClient で実装してもそれほど面倒ではないと思います。使用は推奨されていません
    が System.Web.Mail.MailMessage クラスを使うという手もあります。

    2009年6月26日 12:01
  • totojoさん有難う御座います。
    やはり駄目だったんですね。判りました。
    2009年6月28日 23:13
  • 佐祐理様
    有難う御座います。
    できないという事がわかり助かりました。
    2009年6月28日 23:14
  • SurferOnWwwさん有難う御座います。
    >Net1.1で実装する事も試みました。 http://dobon.net/vb/dotnet/internet/smtpauth.html も参考にしてやりましたが
    複数のあて先、HTML形式のメール本文、添付ファイルをつけることの 3点に挫折して .Net3.5のdllを使おうとしたのでした。

     今回、窮鼠猫を噛むのとおり次の方法で実装する事にしました。

    .Net 3.5でmail.exeを作成しました。(dllをEXEにしただけです。引数として、複数あて先のcsvファイルの場所、html形式の本文のテキストファイルの場所、添付ファイルの場所をうけます。)
    最初にASP.Net1.1のWebアプリで送信したいhtml分をTXTファイルにしてサーバーに一時保存します。(mailbody.txt)
    次にASP.Net1.1のアプリからshellコマンドでD:\mail.exe d:\csvfile,d:\mailbody.txt,d:\attachedfilepathを実行する。

    引数から複数あて先、html形式の本文、添付ファイルの情報を取得し.Net3.5で作成したdllで読込んでメールを送信する。
    この方法もちょいと面倒でしたが当初の目的を達成する事ができました。

    でも、このやり方は自分の中では邪道のような気がします。
    いずれ年内には今の.Net1.1のASP.Netのアプリは全てバージョンアップする予定ですが、それまでの間にこの”邪道”なやり方で
    何とかユーザーには許してもらう事にします。

    本当にいつも有難う御座います。
    2009年6月29日 1:14