1. ホーム
  2. c#

Visual Studio が未修正のプロジェクトを再構築する

2023-09-09 07:16:32

質問

タイトルにあるように、私は現在、50 のプロジェクトを含む VS2010 ソリューションを持っています。もし私が何も参照していないトップレベルのプロジェクトに変更を加えると、VS は 50 のプロジェクトすべてを再構築します。私はVisual Studio 2010 Ultimateをアドオンなしで使用しています。ILMerge を使用して、すべてのプロジェクトを 1 つのファイルに統合しています。

下位レベルの dll のタイムスタンプをチェックすることによってこれを検証し、コードがタッチされていないにもかかわらず、実際に再構築されることを確認しました。

に対するすべての応答とコメントを読みました。

Visual Studio 2008 が再構築され続ける

Visual Studio はすべてを構築し続ける

私のソリューションで VS2010 ビルドの奇妙な不具合が発生する

Visual Studio で C# プロジェクトが再構築される理由

しかし、それらのほとんどは、ビルド時間を短縮するためにプロジェクトをアンロードすることを提案するだけで、修正方法について具体的なことは何も述べていません。私は、依存するプロジェクトが再構築される必要がないのに、なぜ VS が再構築される必要があると考えるのかを解明し、それを修正しようとしています。

ツール > オプション > プロジェクトとソリューション > ビルドと実行 > 起動プロジェクトと依存関係を実行時にのみビルドする」をオンにしましたが、効果がありません。

また、8 つの (中) 直接依存関係があるだけの "mid-level" プロジェクトを再構築すると、ILMerge が起動されず、依存するプロジェクトがどれも変更されていないにもかかわらず、8 つのプロジェクトすべてがビルドされます。

提供できるかもしれないどんな洞察でも、みなさんありがとうございます。

追加

いくつかの提案をテストするために、私はゼロから新しい WinForms プロジェクトを作成しました。次に、そのソリューション内に 2 つの新しいプロジェクトを作成しました。私は、2 つの「最下位レベル」のプロジェクトから、すべてのコードとリソース (プロジェクト ファイルではない) を 2 つの新しいプロジェクトにコピーしました (私は、エクスプローラーから Visual Studio のプロジェクトにファイルおよびフォルダーをドロップしてこれを実行しました)。

最下層のプロジェクトは、仮に B は他のプロジェクトを参照しませんでした。次のプロジェクトは A を参照しています。 B だけです。そのため、必要な .NET と外部アセンブリの参照をプロジェクトに追加すると、ソリューションがビルドされるようになりました。

次に、新しい WinForm プロジェクトの参照に A を参照し、フルビルドを行いました。つまり、参照チェーンは

WinForm -> A -> B

次に、私は WinForm のみ を追加し、標準ビルド (F6) を実行しました。以前と同様に、Visual Studio は 3 つのプロジェクトすべてを再構築しました。

プロジェクト内のソース ファイルをいくつか体系的に整理した後 B を削除すると Resources.Designer.csResources.resx (を使用するコードをコメントアウトしています。 .Properties.Resources オブジェクトを利用するコードをコメントアウトしています)、次に WinForm を修正すると、ソリューション全体がリビルドされなくなり WinForm .

を追加する Resources.resxResources.Designer.cs プロジェクトに戻る B (ただし、リソースを何も利用しないように、参照されるコードをコメントアウトしたまま) は、完全なビルド動作を再び導入します。

リソース ファイルが破損しているかどうかを確認するために、それらを再度削除してから、新しいものを作成し (プロジェクトのプロパティ -> リソース)、以前と同じリソース (単一の Excel ファイル) を追加しなおしました。このセットアップでは、完全な再構築はまだ発生します。

次に、単一のリソースを削除しましたが、リソース ファイルはプロジェクトに残しておきました。 B . リソースを追加せず、リソース ファイルをプロジェクトに残したままでも、完全な (不要な) 再構築が発生します。

(.NET 3.5) プロジェクトにリソース ファイルが追加されただけで、Visual Studio 2010 はそのプロジェクトを常に再構築するようです。これはバグでしょうか、それとも意図された/予期された動作でしょうか?

みなさん、本当にありがとうございます。

どのように解決するのですか?

ツール - オプションを開き、ツリーで [プロジェクトとソリューション] - [ビルドと実行] を選択し、"MSBuild project build output verbosity" を Diagnostic (診断) に設定します。 これにより、プロジェクトを構築した理由、つまり、次のようなことが出力されます。

プロジェクト 'ReferencedProject' は最新ではありません。プロジェクト項目 'c:\some.xml' の 'Copy to Output Directory' 属性は 'Copy always'に設定されています。

または

プロジェクト 'MyProject' は最新ではありません。入力ファイル c:\MyProject.pdb' の後に変更されています。 入力ファイル 'c:\MyProject.ddb' が出力ファイルの後に変更されています。

この場合、some.xmlが新しい場合のみコピーするように修正します。

ビルド前とビルド後のイベントもビルドのトリガーになります。