2017-11-17 22 views
0

.NETアプリケーション用のMSBuildプロジェクトファイルでは、rc.exeを使用していましたが、Execタスクを使用して呼び出しました。パスを取得しましたWindowsSDK80Pathからrc.exeに転送します。.NETプロジェクトのMSBuildでrc.exeを使用する方法

これはVisual Studio 2015でうまくいきましたが、VS2017(VS2015がインストールされていない)の場合は、WindowsSDK80Pathが存在しないディレクトリを指しています。残念ながら、新しいインストールパスを取得する方法が見つかりませんでした。私のマシンではC:\Program Files (x86)\Windows Kits\10になるでしょう。

RCタスクの使用方法がわかりません。the documentation says「Visual C++固有のタスク」のため、使用するのが適切かどうかわかりません。

rc.exeをVS2015とVS2017の両方で使用するにはどうしたらいいですか?可能であれば、次のバージョンのVisual Studioでも使えますか?

GetFrameworkPathは、適切なパスを取得しないことに注意してください。)

+0

VSコマンドプロンプトまたはVS内からビルドする場合は、PATHのrc.exeではないので、そのように呼び出すことはできますか? – stijn

+0

@stijn VSコマンドプロンプトはオプションですが、VS内では動作しません。VS内では、MSBuildが呼び出されたときにrc.exeがパスに存在しません。 – Martin

+0

VSコマンドプロンプトからVSを開始しない限り。 – stijn

答えて

0

私はこの思い付いた:Execタスクは、最大のバージョン番号とSDKのためにHKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windowsでレジストリに見えること、PowerShellスクリプトを呼び出してインストールパスを取得し、そのパスからそれが遭遇した最初のrc.exeを呼び出しますそれはx86ディレクトリの下にあります。

少し醜いですが、動作します。

0

RCタスクがCであるMicrosoft.CppCommon.targetsで定義されています:\プログラムファイル(x86の)\ MSBuildの\ Microsoft.Cpp \ v4.0 \ v140を私のマシンにインストールします。あなたは、あなたのプロジェクトにそのターゲットファイルをインポートするだけでなく、それを見つけて(いくつかの変更を加えて)あなたのプロジェクトにコピーすることができます。

編集...

は、そのタスクをインポートして、物理的なパスを使用しないようにする安全な方法でなければなりません。

+0

いいですね、試しましたが、私はできませんでした。 'Microsoft.CppCommon.targets'をインポートするとMSBuildが報告します'ターゲット "SetBuildDefaultEnvironmentVariables"は存在しません[...] '、' Microsoft.Cpp.Current.targets'で定義されています。インポートしたプロジェクトには、 "C:\ Platform.targets"というインポートされたプロジェクトが見つかりませんでした[...]。その方向に進むのが理にかなっているかどうかは不明です。さらに、私は 'Microsoft.CppCommon.targets'へのパスを取得する必要があります。 'VCTargetsPath14'はオプションになりますが、最終的に' VCTargetsPath15'などに変更しなければなりません。 – Martin

関連する問題