** 気にしないでください。プロジェクトにコマンドライン モードが含まれているため、以下の回答を見逃していました **
これは簡単でもきれいでもありません。しかし、以下の #4 は、あなたが求めているように、ビルドの自動化と管理のルートをより「完全に」進めたい場合に、どのように改善し始めるかを示しています。
1) OP の例では、スクリプトとして MSBuild を使用します。この例では、これは、MSBuild プロジェクトのトリックを実際に取得するよりも、シェルまたはバッチ ファイルを使用するのと同じように、より多くの自動化です。.sln ルールについては #2 を参照してください。また、これがもっとやりたいと思っていたことについては #3 を参照してください。
2)「メモリのみ」の.sln質問について: 基本的に、MSBuild で .sln ベースのプロジェクト参照を解決するために必要な .sln を使用する場合、それを「影響ゼロ」または「メモリのみ」の状態にすることはできず、フラッシュするか、フラッシュする必要があります。ディスクに保存されます。これは、プロジェクト システム自体を所有している場合でも当てはまります。MSBuild は参照を解決するためにファイル自体を調べ、それが別のプロセスで実行され、独自の心でファイル システムにあることを期待するからです。したがって、.sln ファイルを使用する場合は、実際の .sln ファイルが必要です。したがって、.sln ファイルのクラフトを使用しない .sln アプローチへの期待は的中しています。VS を実行して msbuild を実行すると、これらが生成され、MSBuild が開始される前にそれらをディスクにフラッシュする必要があります。そこでは、ビルドまで「影響なし」の状態のままになります...完全に冗長で明確にするためです。
3)「import .proj」の質問について:私があなたの目的のために知っている同様のオプションの1つ<Import Project="my/proj/path/mine.csproj"/>
は、ファイルの一括インクルードとまったく同じであり、それらのファイルをその外部プロジェクトの一部であるかのように扱い、コンパイルしますそのアセンブリ。内部で microsoft によって頻繁に使用されます。この方法で使用されるインポートは、インポートされた .proj ファイル内の内容の多くを無視し、基本的に、外部プロジェクトに含まれる他のファイルと同様に、含まれるファイルを探します。したがって、とにかく同じアセンブリでそれらすべてを構築するつもりがない限り、これで先に進むとは思いません。その場合、含まれている .proj ファイルをこの意図で構造化し、外部を悪用/構造化して、すべてに必要な参照などを含める必要があります。
4)その参照定義。参照に関する多くのオプションがあり、それらがコピーされるか、GAC に配置されると想定されるか、または「実行時にアプリ ドメインの検索パスに存在することを何もせずに信頼してください」. そのcr * pのほとんどをオフにすることができます。その場合、唯一の依存関係はビルドと言語コンパイラであり、参照されたアセンブリをそのタイプとwhatnbotで解決できるため、すぐにコンパイルしようとしている依存アセンブリをコンパイルできます。 . 考えてみると、自分でビルドしないで、ビルドがピックアップしてコンパイルに使用する参照が他にもたくさんあります。したがって、本当の問題は、「コンパイルした依存関係が機能し、他の参照のように見える状態で自動ビルドを取得するにはどうすればよいか」ということかもしれません。
ビルドを制御できるので、DLL の配置を制御でき、ビルド順序を担当できます。そして...参照を制御できます。
残りの古典的な問題は次のとおりです。設計時に、参照が .sln プロジェクトを指している場合、ビルドしなくても外部アセンブリから型の設計時ルックアップを取得できます。プロジェクトを不可知論的に変更すると、次のようになります。コンパイルする。条件付きの.projファイルを含む多くの行に沿ってトリッキーなことを行うことができます。これは、開発者に負担をかけ、場合によっては手作業で編集して同期を維持するか、スクリプトを介して.projファイルフィルターを事前に構築して参照を修正するか、作成しますそれらを非 sln 参照にし、開発者に依存関係を構築して型を解決するように強制します。そこでは、使用する環境がビルドと一致していることを確認する必要があります。
したがって、問題は参照がどのように定義されるかに要約されます。はい、VS 自体に関係なく、MSBuild が機能するためには、MSBuild に必要なすべてのクラフトをディスクに書き込む必要があります。問題は、参照を同時に両方の方法で定義できないことであるため、毒を選択する必要があります。これは、古典的なビルド管理の問題です。あなたは一人ではありません。