В чем разница между <RequiredTargetFramework> и <targetframeworkversion>?

Мы обновили наши проекты .net 3.5 (С#) до .net 4.0. Когда вы смотрите файл проекта, есть два тега, которые я пытаюсь понять:

<RequiredTargetFramework>3.5</RequiredTargetFramework>
<TargetFrameworkVersion>4.0</TargetFrameworkVersion>

Почему существуют два, казалось бы, похожих тега с разными значениями?

Ответ 1

Элемент <RequiredTargetFramework> уже присутствовал в вашем проекте 3.5. Он связан с сборкой <Reference> и присутствует только в сборках, которые недоступны в .NET 2.0

Я не покупаю много акций в единственном упоминании об этом в MSDN, я не вижу, как в пакетном построении есть что-то, что можно сделать с ссылками на сборку. Он также не используется ни в одном из 3.5 файлов MSBuild.target. Я думаю, что IDE просто использует его, чтобы поместить значок предупреждения рядом со ссылкой в ​​ссылках node, когда вы изменяете целевую структуру до версии, меньшей, чем то, что необходимо для поддержки сборки.

В файле проекта есть другие элементы, которые не влияют на MSBuild, но имеют эффект в среде IDE. Как <SubType> и <DependentUpon> в элементе <Compile>.

Ответ 2

Вы нашли эту ссылку? текст ссылки. TargetFrameworkversion - это просто, что вы можете изменить в свойствах проекта, чтобы сказать, с какой структурой следует строить против. В статье говорится, что RequiredTargetFramework используется для пакетных элементов (но он по-прежнему не ясен в этой реальности, кроме того, что он не используется много)

группирует элементы Reference по их метаданным RequiredTargetFramework. Результат цели выглядит следующим образом:

Ссылка: 3.5; 3.5

Ссылка: 4.0

Целевая группировка редко используется в реальных сборках. Выделение задач более распространено. Для получения дополнительной информации см. Раздел MSBuild Batching.