VC#さんよぉ… お前さん何してくれたんじゃ…? orz - 捜し物はなんですか♪(チャンチャラン
2010-07-16 追記以下の記事はおそらく根本的に間違ってます。信用しないでください。^^;
追加の情報が色々あるもまとめてる時間が無ぇー
ExcelのCOMアドインを VC# で作ってみようのコーナー!
ってことで、作り始めたは良かったんです…がー。 VC#さんから謎のメッセージに応答しちゃったが為に、アセンブリが見つからなくなってしまうという現象が発生。 そして今のところ根本的解決も出来てない気がする状態。 …どうしてこうなった…
とりあえず色々羅列
環境
- Windows 7 (x64)
- VC#2008 SP1
現象
VC#から「'AddInDesignerObjects' が見つかん無ぇよ。死ねよ。マジで使え無ぇ技術者だな。そんなんでメシ食っていけると思ってるのアァん?」と死の宣告を報告される。
…ごめんね。 .NET Framework の仕組み知らなくてごめんね…
緊急回避策
- VC++2008SP1を引っ張ってきます。
- C++/CLI プロジェクトを作ります。
- プロジェクトのプロパティで、"Microsoft Add-In Designer" を参照に追加します。
- おもむろにビルドします。
- Rozen Maiden の DVD-BoxX を発注します。amazon通販するのが便利です。*2
- VCプロジェクトディレクトリ配下の [Interop] ディレクトリ内に "Interop.AddInDesignerObjects.1.0" とかなんか居るぞ…!
- この子を VC# から参照すると…見つかった!見つかったよ!徳川埋蔵金が見つかったよ!!
- ストレス解消したそのノリで追加でポチります。(わんっ
↑デター!(せがれいじり(C))
↑キタ━━━━━━(゚∀゚)━━━━━━ !!!!! *3
問題点
ってかこのDLL参照して開発して、正しくアドイン作れるの?(ぉ
事象詳細
VC#でプロジェクトを開いたときに以下の警告メッセージが出てきたことが発端でした。
参照コンポーネント AddInDesignerObjects には、更新された使用可能なカスタム ラッパーがあります。
COM コンポーネントに参照を追加した後、それらの COM コンポーネントに対する 1 つ以上のカスタム ラッパーがこのコンピュータにインストールされました。これらのラッパーは、現在使用されている自動生成ラッパーで提供されていない追加機能を提供する可能性があります。
自動生成ラッパーをカスタム ラッパーに置き換えますか?
ここで「はい」を押したことにより、突然参照が見つからねぇよ死ねよエラーが出るように…。なにしてくれるんッスか VC# さん… orz
この時、VC#さんが何をやらかしたのかがさっぱりなので元の状態に戻すための対策がさっぱりな状況です。 以下やってみたこと。
VC# 2010 から使えるかしら?
VC#2008 固有の問題 だといいなぁと思い、VC#2010をインストール → "Microsoft Add-In Designer" を参照してみましたが、同じ警告メッセージが出てきてダメでした。 orz
どうもシステムレベルでなんかやっちゃってる臭い。
その他
関係あるのか無いのか
●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 から見えるようにすりゃいいんだろうけど…どうすりゃいいのかしら…。 うぐぅ…