VC#さんよぉ… お前さん何してくれたんじゃ…? orz - 捜し物はなんですか♪(チャンチャラン


2010-07-16 追記

以下の記事はおそらく根本的に間違ってます。信用しないでください。^^;

追加の情報が色々あるもまとめてる時間が無ぇー


ExcelのCOMアドインを VC# で作ってみようのコーナー!

ってことで、作り始めたは良かったんです…がー。 VC#さんから謎のメッセージに応答しちゃったが為に、アセンブリが見つからなくなってしまうという現象が発生。 そして今のところ根本的解決も出来てない気がする状態。 …どうしてこうなった…



とりあえず色々羅列

環境

現象

VC#から「'AddInDesignerObjects' が見つかん無ぇよ。死ねよ。マジで使え無ぇ技術者だな。そんなんでメシ食っていけると思ってるのアァん?」と死の宣告を報告される。

…ごめんね。 .NET Framework の仕組み知らなくてごめんね…

とりあえず参照を追加する

COMアドインを作るには IDTExtensibility2 インターフェースが必要なので、"Microsoft Add-In Designer"*1 への参照を追加しました。

http://ir9.jp/hd10/0709_00.png

# ってかコレがそもそも違うとかそんなオチは無いよなぁ…(ぉ orz
# いや、エラーメッセージが出る前は確りコンパイル出来てたしなぁー。うーむ。

エラーが出る

VC#のエラー一覧ウィンドウに以下の警告メッセージが表示されます。

  • Cannot find wrapper assembly for type library "AddInDesignerObjects".
  • 参照コンポーネント 'AddInDesignerObjects' が見つかりませんでした。


名前空間 'AddInDesignerObjects' が見つからないので、コンパイルも失敗します。

緊急回避策

  1. VC++2008SP1を引っ張ってきます。
  2. C++/CLI プロジェクトを作ります。
  3. プロジェクトのプロパティで、"Microsoft Add-In Designer" を参照に追加します。
  4. おもむろにビルドします。
  5. Rozen Maiden の DVD-BoxX を発注します。amazon通販するのが便利です。*2
  6. VCプロジェクトディレクトリ配下の [Interop] ディレクトリ内に "Interop.AddInDesignerObjects.1.0" とかなんか居るぞ…!
  7. この子を VC# から参照すると…見つかった!見つかったよ!徳川埋蔵金が見つかったよ!!
  8. ストレス解消したそのノリで追加でポチります。(わんっ

http://ir9.jp/hd10/0709_01.png
↑参照を追加します

http://ir9.jp/hd10/0709_02.png
↑デター!(せがれいじり(C))

http://ir9.jp/hd10/0709_03.png
↑キタ━━━━━━(゚∀゚)━━━━━━ !!!!! *3

問題点

ってかこのDLL参照して開発して、正しくアドイン作れるの?(ぉ



事象詳細

VC#でプロジェクトを開いたときに以下の警告メッセージが出てきたことが発端でした。

参照コンポーネント AddInDesignerObjects には、更新された使用可能なカスタム ラッパーがあります。

http://ir9.jp/hd10/0709_04.png

COM コンポーネントに参照を追加した後、それらの COM コンポーネントに対する 1 つ以上のカスタム ラッパーがこのコンピュータにインストールされました。これらのラッパーは、現在使用されている自動生成ラッパーで提供されていない追加機能を提供する可能性があります。

自動生成ラッパーをカスタム ラッパーに置き換えますか?


http://ir9.jp/hd10/0709_05.png

ここで「はい」を押したことにより、突然参照が見つからねぇよ死ねよエラーが出るように…。なにしてくれるんッスか VC# さん… orz

この時、VC#さんが何をやらかしたのかがさっぱりなので元の状態に戻すための対策がさっぱりな状況です。 以下やってみたこと。


VC# 2010 から使えるかしら?

VC#2008 固有の問題 だといいなぁと思い、VC#2010をインストール → "Microsoft Add-In Designer" を参照してみましたが、同じ警告メッセージが出てきてダメでした。 orz

どうもシステムレベルでなんかやっちゃってる臭い。

.NET 関連をイチから再インストール

以下をアンインストール → 再起動 → インストール しても状況変わらずでした。orz

  • VC#2010
  • VC#2008
  • VC++2008
  • Office 2003 SP1
  • Windows でデフォでインストールされる .NET Framework 3.5

その他

関係あるのか無いのか

HKEY_CLASSES_ROOT\TypeLib\{AC0714F2-3D04-11D1-AE7D-00A0C90F26F4}\1.0 の "Microsoft Add-In Designer" 項目に "PrimaryInteropAssemblyName" なんつー名前があって、値に "Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" とか設定されている。
何となく関係有りそうな気がするも、何を意味してるのかさっぱりかしら…

tlbimp.exe でも、COMプロキシっぽいのが生成できる臭い? ってことで、tlbimp.exe MSADDNDR.DLL してみると…

TlbImp : warning TI0000 : Primary interop assembly 'Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is already registered for type library 'C:\Program Files (x86)\Common Files\DESIGNER\MSADDNDR.dll'.
Type library imported to AddInDesignerObjects.dll

とか何とか。「AddInDesignerObjects.dllでインポート済みなんですけどー」とか言われちゃう。済と言われても、そいつが見つからないのかしら…

●そもそも、AddInDesignerObjects.dll ってのはグローバルアセンブリキャッシュに入れて全体から見えるべき状態にしておくものなのかすらわからん。

●とりあえず VC++ が生成した AddInDesignerObjects.dll を、グローバルアセンブリキャッシュに入れてみる…?

>gacutil /i AddInDesignerObjects.dll
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.

キャッシュにアセンブリを追加しているときにエラーが発生しました: 厳密名のないアセンブリをインストールしようとしました

あー、署名だかなんだかが必要なんだっけか…

>al AddInDesignerObjects /target:lib /out:AddInDesignerObjects.dll
Microsoft(R) Assembly Linker version 9.0.30729.1
Copyright (C) Microsoft Corporation. All rights reserved.

ALINK: error AL1047: ファイル
        'AddInDesignerObjects'
        のインポート中にエラーが発生しました --
        指定されたファイルが見つかりません。

>al AddInDesignerObjects.dll /target:lib /out:AddInDesignerObjects2.dll
Microsoft(R) Assembly Linker version 9.0.30729.1
Copyright (C) Microsoft Corporation. All rights reserved.

ALINK: warning AL1020: 含まれているアセンブリ
        'AddInDesignerObjects.dll'
        を無視します。
ALINK: error AL1016: 有効な入力ファイルが指定されませんでした。

>al /out:AddInDesignerObjects.dll AddInDesignerObjects.dll /keyfile:keypair.snk
Microsoft(R) Assembly Linker version 9.0.30729.1
Copyright (C) Microsoft Corporation. All rights reserved.

ALINK: error AL1043: マニフェスト ファイル名
        'AddInDesignerObjects.dll'
        をモジュール名と同じにすることはできません。

他にも色々やってみたものの、エラーしか出ない…使い方分からない… ってか、署名済みっすかもしや。orz


……という感じで迷走中…。

元の AddInDesignerObjects.dll をどうにか見つけて、何とかして .NET Framework から見えるようにすりゃいいんだろうけど…どうすりゃいいのかしら…。 うぐぅ

*1:ちゅーか MSADDNDR.DLL

*2:(C|C++)屋さんは(ビルド|make)中にWeb巡回するのが常識です。時間掛かるんだもん!(んまぁ今回はすぐ終わるけど:ぉ)

*3:やっべ、プロジェクト名が Add'ON' になってる(ぉ orz