これらのプロジェクトをビルドする必要があり、いくつかの奇妙な方法があります。それらは、別のプロジェクトのビルドプロセスの結果として生成されたリンクされたコードファイルに依存しています。これらのプロジェクトは、サブフォルダ内にあります。.NET 4.7の外部プロジェクトを解決するMSBuildターゲット経由のNuGet依存関係
したがって、私たちのプロジェクトをビルドする前に、サブプロジェクトを構築する必要があります。これは、カスタムビルドターゲットを各プロジェクトのBeforeBuildターゲットに追加することで実行され、動作するようです。ただし、サブプロジェクトは、NuGetの依存関係を復元することなくビルドされません。
明確にする:このパターンは完全に嫌気ですが、このパターンを使用するすべてのプロジェクトをリファクタリングする人材はありません。私たちは、それらを一段階で確実にコンパイルできるようにしようとしています。
これらの外部プロジェクトの依存関係のそれぞれは、カスタムItemGroupにリストされているので、同じよう:
<ItemGroup> <ExternalDependantProjects Include= "..\<subfolder>\<project>\<project>.csproj" /> </ItemGroup>
私たちは、各プロジェクトのBeforeBuildターゲットによって呼び出されるカスタムビルドターゲットを追加することによってこの問題を解決しようとしてきました。最初にResolveNuGetPackageAssetsをビルドターゲットとして使用しようとしましたが、net47をターゲットにしている間にこれがnetcoreでのみサポートされていることがわかりました。
今、外部プロジェクトのNuGet依存関係を復元するカスタムビルドターゲットを作成しようとしています。 <Exec Command="nuget restore @(ExternalDependantProjects)" />
と多少複雑&ハックPowerShellの試み:<Exec Command="powershell.exe -command "'@(ExternalDependantProjects, '' '')' | foreach { nuget restore $_ }"" />
は、どちらの場合も、それは単にメインプロジェクトのパッケージではなく、外部のプロジェクトを復元しようとする私たちはそうのように、ストレートなアプローチを試みました。 @(ExternalDependantProjects)が空白に等しいと思われるので、新しい引数は追加されません。 usingを使用すると、@(ExternalDependantProjects)は何も返しません。ただし、MSBuildの「ビルド」ターゲットを呼び出すときは、「プロジェクト」パラメータとして機能します。だから私は間違った方法でItemパラメーターを使用していると思われますか?おそらく、アイテムのIncludeプロパティにアクセスするための構文がありますか?
しかし、私たちがその問題を解決できるのであれば、それがうまくいくかどうかはわかりません。サブプロジェクトでnuget restoreコマンドを使用してテストした結果、package.confのすべてのパッケージがインストールされているという応答が常に得られます。しかし、その外部プロジェクトの\ packages \は空で、packages.confには半ダースのパッケージが指定されています(これらはVSの "References"からも見つからず、参照のHintPathは.. \ packagesに正しく移動します)。
私たちは3つの面で混乱しています:MSBuildターゲットからのExternalDependentProjects Itemインクルードパスの参照方法、なぜNuGetリストアCLIが機能しないのか、この問題を解決する正しい方法?私たちは間違った道を完全に崩したのですか?
これがハッキングされる必要がある理由は明らかにされていません。ちょうど他のような通常のプロジェクトにしてください。あなたがしなければならないことは、他のものの前に構築されていることを確認することだけです。おそらくMSBuildはこれを理解することはできませんので、手伝ってください。ソリューションノードを右クリックし、[プロジェクトの依存関係]を選択します。 –
@ジャンスキー、この問題はどうですか?この問題は解決しましたか?そうでない場合は、この問題に関する最新情報をお知らせください。 –
ちょっと@レオ-MSFT、私は本当にあなたの応答に入れてすべての努力に感謝します。それは私に解決策に向かって良いカップルのスレッドを与えた。しかし、私は別のプロジェクトに移ってきましたが、これを解決するための時間をいつ得るかはわかりません。いずれにせよ、私はあなたの答えを今のところ答えにします。 – Jansky