c#から管理されていないC ++ライブラリにdllimportを実行する場合のmsbuild4.0の依存関係の問題
-
27-09-2019 - |
質問
VS2010のVS2010の依存関係を明示的に設定していないC ++プロジェクトとC#プロジェクトは、VS2010で表彰されますが、MSBuild 4.0では依存関係は無視されます。
AFAIKのC#プロジェクトから管理されていないC ++プロジェクトへの参照を追加することは不可能です。
ソリューションに管理されていないプロジェクトが含まれている場合、正しいビルドオーダーを確保するにはどうすればよいですか?
解決
MSBuildにはバグがあり、ソリューションレベルで追加されたプロジェクトの依存関係を正しく尊重しません。を見てみましょう http://social.msdn.microsoft.com/forums/en-us/msbuild/thread/80cc6447-b720-4806-8395-7c257b207613/ と https://connect.microsoft.com/visualstudio/feedback/details/613284/msbuild-4-does-not-respect-build-order-when-building-a-solution
ConnectページにMicrosoftによる投稿は、MSBuildの64ビットバージョンのバグであることを示しています。 32ビットバージョンに切り替えて、それが問題を解決するかどうかを確認してください。
それができない場合、または機能しない場合、他に2つのオプションがあります。どちらも理想的ではありません。
最初のオプションは、SLNファイルを手動で編集し、プロジェクトがファイルに表示される注文を変更して、必要なビルドオーダーに合わせて変更することです。ソリューションファイルへの追加の変更が変更を再び上書きする可能性があるため、Victorのソリューションははるかに優れたアイデアになると思います。
2番目のオプションは、ソリューションのMSBuild「Metaproject」を手動でエクスポートし、ビルドオーダーを直接編集し、必要なその他のカスタマイズを追加することです。私が読んだことから、Microsoftでも「Dogfood」ソリューションコンパイルはありません。代わりに、ビルド中に完全に回避し、代わりにカスタムMSBuildファイルを使用します。
Metaprojを生成するには、環境変数msbuildemitsolutionを1に設定します。ソリューションでmsbuildを実行した後、同じディレクトリに「.metaproj」ファイルを表示する必要があります。これには、MSBuildがインメモリを生成してソリューションをコンパイルするスクリプトが含まれています。必要な編集を行い、チェックインしてから、ビルドサーバーを設定してコンパイルできるはずです。
この問題は、Visual Studioの次のリリースで消えます。 Microsoft Connect Pageには、次のリリースで修正されるというMicrosoftからの投稿があり、噂では.SLNファイルを取り除き、適切なMSBuildプロジェクトに置き換えています。