投資 ときどき プログラム

MSBuild AxImp Error(解決)

C#のVisual StudioプロジェクトをMSBuildでコンパイルする際のエラーに悩まされていましたが、ようやく解決しました。

目的

  • MSBuildでVisual Studioプロジェクトをビルドしたい。

問題

  • プログラムからActiveXオブジェクト(Microsoft Officeの機能)を呼び出すソースコードのコンパイル時にエラー。
  • エラーコード:MSB3086 AxImp.exeが見つかりませんと言われ、Visual Studio プロジェクトをコンパイルができない…
  • Visual Studioでは正常にビルドできる。
  • でも、やりたいことはVisual Studioでコンパイルをしたいんじゃない。MSBuildでコンパイルがしたい。

結論

  • レジストリエディタでAxImp.exeのあるフォルダを指定する。
  • WOW6432Nodeの下にレジストリ登録する。

環境

  • Windows10 Pro 64bit

MSBuild実行時、エラー対策として4つの方法が提示されます。
それぞれの方法と試した結果。

1. SdkToolsPathの変更(効果なし)
 Visual Studioで作成したC#プロジェクトファイル「.csproj」中、以下の記述 <Import Project=”$(MSBuildToolsPath)\Microsoft.CSharp.targets” />
→「Microsoft.CSharp.targets 」のあるフォルダのパスに直接書き換えたが効果なし。


2. レジストリキー(効果あり)
→キーを追加することで解決。しかし、MSBuildエラー時に提示された解決方法を信じても解決できない…ここで相当嵌った。

→Windows SDKをインストールしていても、MSBuildはSDKのある場所を自動的に参照してくれません。


3. Microsoft Windows SDKインストール(効果なし)
→Windows10 SDKをインストールしただけでは解決できず。


4. Visual Studio2010のインストール(効果あり)
→Visual Studio 2010または2017のインストール

→Visual Studioに同梱されたMSBuildを使用すれば解決する。他のバージョンは調べてない。

2つの方法で解決できることが分かった。
Visual Studioをインストールすれば解決できるけれど、MSBuildを使う人はそんなことをそもそもしたくない or 環境の制約でできない人かと。
故にレジストリキーを変更するのがよいかと。

必要なもの

・AxImp.exe
こいつがないとエラーを解決できない。

AxImp.exe の入手方法:以下のいずれかをインストール。
・MSBuild (14)
https://www.microsoft.com/ja-JP/download/details.aspx?id=48159
・Windows SDK
https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk

実践

1. レジストリエディタを起動
2. レジストリにキーを追加
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools-x86
「新規」→「文字列値」→InstallationFolder
上記文字列値「 InstallationFolder 」に「AxImp.exe」のあるフォルダパスを保存→(例)C:\Program Files (x86)\MSBuild\14.0\Bin

1. レジストリエディタを起動
2. レジストリにキーを追加
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools-x86
「新規」→「文字列値」→InstallationFolder
上記文字列値「 InstallationFolder 」に「AxImp.exe」のあるフォルダパスを保存→(例)C:\Program Files (x86)\MSBuild\14.0\Bin

補足

  • 上記レジストリの追加場所は、 使用しているWindows SDK、MSBuildのバージョンによって追加する場所が違います(エラー時の表示を確認するしかない)。
  • 提示されたレジストリの場所を「WOW6432Node 」以下に新たに作成します。
  • 上記は、MSBuild 14をインストールした状態での解決例です。
  • 上記レジストリの部分が参照されるということは、64bit環境でMSBuildを実行する際に MSBuildが32bitで呼び出されているということなのかもしれません。 ※WOW64は、32bitのプログラムを64bit環境で動作させるための仕組みです。