Попытка построить решение Visual Studio 2010 с 132 проектами, которые не используют никаких ссылок на файлы (только ссылки на проекты). Когда я собираю все решение, я получаю много ошибок, таких как:
The type or namespace name 'xxxx' does not exist in the namespace '<namespace name>' (are you missing an assembly reference?)
Целевой версией фреймворка для ВСЕХ проектов в решении является v3.5.
Поэтому я начал строить проекты один за другим на основе Порядка сборки проекта. И в одном из проектов (скажем, проект 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) «Runtime Version» как версия 2.0.50727.
2) «Копировать локально» как True.
3) «Сильное имя» как Истина.
4) «Версия» как 1.0.xxxx.xx (как указано в AssemblyInfo.cs проекта A)
5) Нет ключа «Конкретная версия» (потому что это ссылка на проект)
- AssemblyInfo.cs проекта B имеет следующее:
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 .
Как движок сборки использует утилиту GAC версии 4.0, если моей целевой платформой является версия 3.5?
Поиск всех файлов, чтобы увидеть, если .NET 4.0 настроен где-то, но не смог его найти.
Это, вероятно, является основной причиной вышеуказанной проблемы. Или я что-то упускаю? Я полагаю, что покрыл обычных подозреваемых.
Кроме того, почему в справочной версии проекта A в проекте B указывается версия 2.0.50727, если целевая версия платформы для обоих проектов v3.5?
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:
Командная строка события Post-build для проекта A имеет следующее, что объясняет, почему при сборке используется утилита GAC версии 4.0! Теперь мне нужно понять, как получить Gacutil v3.5.
Мой второй вопрос все еще стоит.
cd "$(ProjectDir)"
cd ..\..\..\Bin
gacutil.exe /if "$(TargetPath)"