Visual Studio 2010: ссылочные блоки, предназначающиеся для более высокой версии платформы

Visual Studio 2008 действительно позволяла Вам сослаться на блок A от блока B когда A предназначался для.NET 3.5, и B предназначался для.NET 2.0.

Visual Studio 2010 больше не допускает это. Полная проблема описана на MSDN:

Можно создать приложения, что ссылочные проекты или блоки, которые предназначаются для различных версий Платформы.NET. Например, если Вы создаете приложение, которое предназначается для Платформы.NET 4 Клиентских Профиля, тот проект может сослаться на блок, который предназначается для версии 2.0 Платформы.NET. Однако при создании проекта, который предназначается для более ранней версии Платформы.NET, Вы не можете установить ссылку в том проекте к проекту или блоку, который предназначается для Платформы.NET 4 Клиентских Профиля или Платформа.NET 4. Для устранения ошибки удостоверьтесь, что профиль, являвшийся целью приложения, совместим с профилем, являвшимся целью проектов или блоков, на которые ссылается приложение.

Есть ли какой-либо способ, которым я могу заставить VS2010 вести себя как VS2008 в этом отношении (т.е. ссылки разрешения на блоки, предназначающиеся для более высоких версий платформы)?

Я знаю обоснование позади поведения VS 2010 и рекомендаций по развертыванию, о которых я должен знать, никакая потребность повторить это.

Точная ошибка:

предупреждение MSB3268: основной ссылочный "xxx.dll" не мог быть разрешен, потому что это имеет косвенную зависимость от Системы "блока платформы. Ядро, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", который не мог быть разрешен в в настоящее время целенаправленной платформе. ".NETFramework, Version=v2.0". Чтобы разрешить эту проблему, или удалить ссылочный "xxx.dll" или перенастраивают Ваше приложение к версии платформы, которая содержит "Систему. Ядро, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".

35
задан Johannes Rudolph 3 March 2011 в 20:52
поделиться

2 ответа

Шаг 1: выгрузите ссылающийся проект, нацеленный на .NET 2.0

Шаг 2: щелкните выгруженный проект правой кнопкой мыши и выберите редактировать в контекстном меню

Шаг 3: Добавить true < / SpecificVersion> к ссылке. Ниже приведен пример моего решения для воспроизведения:

<ProjectReference Include="..\HighFX\HighFX.csproj">
  <Project>{8DD71CAF-BEF7-40ED-9DD0-25033CD8009D}</Project>
  <Name>HighFX</Name>
  <SpecificVersion>true</SpecificVersion>
</ProjectReference>

Шаг 4: Перезагрузите проект.

Теперь у вас должна быть возможность выполнять сборку в Visual Studio 2010, может появиться предупреждение, как показано ниже, но сборка может быть успешной.

Источник: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/dfadfb34-5328-4c53-8274-931c6ae00836

44
ответ дан 27 November 2019 в 06:56
поделиться

Нумерация версий .NET framework после 2.0 стала беспорядочной. Сборка не нацелена на версию .NET framework, она нацелена на версию CLR. И версия CLR для версий 2.0, 3.0 и 3.5 была такой же, 2.0.50727.

Вот почему выглядело так, как будто вы могли смешивать версии в VS2008. Но вы видели [AssemblyVersion] сборки, которая не имеет ничего общего с версией CLR. К сожалению, версия CLR не отображается в окне «Свойства», вам придется запустить Ildasm.exe, чтобы увидеть его в метаданных. Но вы можете с уверенностью предположить, что любая версия сборки между 2.0.0.0 и 3.5.0.0 нацелена на версию CLR 2.0.50727

. Это закончилось .NET 4.0, она получила новую версию CLR, 4.0.30319. Рекламное объявление MSDN сообщает вам, что когда вы нацеливаетесь на CLR версии 2.0, вы не можете использовать сборки, нацеленные на 4.0. CLR версии 2.0 не умеет читать метаданные сборки .NET 4.0, формат был изменен. Единственный обходной путь - заставить EXE загрузить версию 4.0 CLR, даже если он запрашивает 2.0.50727. Вы делаете это с файлом app.exe.config, он должен выглядеть так:

<configuration>
  <startup>
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

И немного протестировав, что он все еще работает правильно, Microsoft использовала v4.0, чтобы исправить несколько старых ошибок в 2.0, которые не могли быть легко устранены. исправлено без риска сломать старый код, основанный на ошибочном поведении.

21
ответ дан 27 November 2019 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: