ファイル参照 (プロジェクト参照のみ) を使用しない 132 個のプロジェクトで Visual Studio 2010 ソリューションを構築しようとしています。ソリューション全体をビルドすると、次のような多くのビルド エラーが発生します。
The type or namespace name 'xxxx' does not exist in the namespace '<namespace name>' (are you missing an assembly reference?)
ソリューション内のすべてのプロジェクトのターゲット フレームワーク バージョンは v3.5 です。
そのため、プロジェクトのビルド順序に基づいて、プロジェクトを 1 つずつビルドし始めました。プロジェクトの 1 つ (プロジェクト A など) で、ビルド出力に以下の情報が表示されます (フレームワークのバージョンに注意してください)。このプロジェクト A は正常にビルドされます。次のプロジェクトをビルドすると、たとえばプロジェクト B がプロジェクト参照 (ファイル参照ではなく) を介してプロジェクト A を参照すると、上記のビルド エラーがスローされます。したがって、プロジェクト B が犯人のようです。
Compile complete -- 0 errors, 54 warnings
<ProjectName> -> <filepath>\<filename>.dll
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
プロジェクトBの詳細
ソリューション構成はデバッグです。
- プロジェクト B の参照ツリーで、プロジェクト A 参照のプロパティが表示されます。
1) 「ランタイム バージョン」は v2.0.50727 として。
2)「ローカルにコピー」をTrueにします。
3) 「厳密な名前」は True です。
4) 1.0.xxxx.xx としての「バージョン」(プロジェクト A の AssemblyInfo.cs で指定)
5) 「特定のバージョン」キーはありません (プロジェクト参照であるため)
- プロジェクト B の AssemblyInfo.cs には次のものがあります。
1) [アセンブリ: ComVisible(false)]
2) [アセンブリ:Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
3) [アセンブリ:AssemblyVersion("1.0.xxxx.xx")]
4) [アセンブリ:AssemblyFileVersion("9.0.xxxx.xx")]
- プロジェクト B のプロパティには次のものがあります。
1) 「ターゲット フレームワーク」は「.NET Framework 3.5」
2) 「出力タイプ」は「クラス ライブラリ」
3) 「警告をエラーとして扱う」は「なし」
私の質問
現在、すべてのプロジェクトのプロパティで指定されているターゲット フレームワークは.NET Framework 3.5です。
ターゲット フレームワークが v3.5 の場合、ビルド エンジンは v4.0 の GAC ユーティリティをどのように使用しますか?
すべてのファイルを検索して、.NET 4.0 がどこかに構成されているかどうかを確認しましたが、見つかりませんでした。これが上記の問題の根本的な原因の可能性があるようです。それとも、他に何か不足していますか?私はいつもの容疑者をカバーしたと信じています。
また、両方のプロジェクトのターゲット フレームワーク バージョンが v3.5 の場合、プロジェクト B のプロジェクト A 参照のランタイム バージョンが v2.0.50727 と表示されるのはなぜですか?
PS: プロジェクト参照を削除して代わりにそのファイル参照を追加しようとしましたが、それでも同じビルド エラーが発生します。(これは通常、以前は長い名前の問題だったときに機能していましたが、この場合は機能しません)。
更新 1:
上記のビルド エラーのビルド出力は次のとおりです。
Compile complete -- 13 errors, 0 warnings
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9):
warning MSB3258: The primary reference "<project A reference name>" could not be resolved
because it has an indirect dependency on the .NET Framework assembly
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxx"
which has a higher version "4.0.0.0" than the version "2.0.0.0" in the current target framework.
更新 2:
プロジェクト A のビルド後のイベント コマンドラインには、ビルドで v4.0 の GAC ユーティリティが使用される理由が説明されています。ここで、v3.5 Gacutil をそこに取り込む方法を理解する必要があります。私の2番目の質問はまだ残っています。
cd "$(ProjectDir)"
cd ..\..\..\Bin
gacutil.exe /if "$(TargetPath)"