trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

ClickOnceの配置で「厳密な名前の署名はこのアセンブリ stdole.dll に対して無効です。」のエラーでアプリ起動せず。

Visual Studio 2010で開発し、ClickOnceで配置しているWPFアプリケーションがあり、いつものようにこのアプリケーションを修正し、ClickOnceで発行を行った。
発行はうまく行ったのだが、クライアントで起動しようとすると、「厳密な名前の署名はこのアセンブリ stdole.dll に対して無効です。」というエラーが出て起動しなくなった。
前回から今回のClickOnceの間に何が変わったのだろう?と思い出してみると、そう、Visual Studio 2013をインストールしたことだった。ひょっとして、これが原因?
とりあえず、Visual Studio 2013のインストール先にある、stdole.dllを確認してみる。そのプロパティを表示すると、製品バージョンが7.00.9466。サイズが16kb。ちなみにVisual Studioの参照設定でAssembliesのExtensionsの一覧にあるstdoleを確認すると、このdllのバージョンは7.0.3300.0のようである。

Visual Studio 2013のstdole.dllがあるフォルダ)
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Common

次にVisual Studio 2010のインストール先にある、stdole.dllを確認しみる。この製品バージョンは、Visual Studio 2013と同じく7.00.9466、および7.0.3300.0。しかし、サイズが22kbと大きい。

Visual Studio 2010のstdole.dllがあるフォルダ)
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Common

ひょっとして、Visual Studio 2013のインストールによって、署名なしのstdole.dllがGACに登録されてしまった? そう考えて以下のコマンドを発行したところ、無事にClickOnceでの配置に成功した。
以下、Visual Studioコマンドプロンプトを管理者権限で起動し、実行した記録である。

C:\Windows\system32>gacutil -if "C:\Program Files (x86)\Microsoft Visual Studio
10.0\Visual Studio Tools for Office\PIA\Common\stdole.dll"

実際に実行している画面は以下の通り。

#本当は、GACの登録にかかわらず、Visual Studio 2010で発行する際に、どのstdole.dllを含むか指定できれば良いと思うんですが、もし誰か知ってたら教えて下さい。しかも、この対応で良かったんだろうか?と思うのだが・・・。いずれにしてもVisual Studio 2013のインストールは注意が必要かもしれない。(犯人がVisual Studio 2013と決まったわけではないのだが・・・。しかも、Visual Studio 2012のstdole.dllを確認すると16kbしかないんだよね。このdllはVisual Studio 2012のインストール時にGACに登録されなかったってことかな?)