VS2010 Сборка проектов .NET v3.5 не удалась из-за потенциальной ссылки .NET v4.0 - PullRequest
0 голосов
/ 09 ноября 2011

Попытка построить решение 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)"

1 Ответ

1 голос
/ 10 ноября 2011

Чтобы ответить на ваш второй вопрос:

.Net 3.0 и .Net 3.5 - это просто новые библиотеки DLL, которые работают на существующем CLR 2.0.

Не существует версий версий между 2.0 и 4.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...