Проблема с понижением версии C # 2010 до 2008

По какой-то причине мне пришлось перенести много кода C # из Visual Studio 2010 в Visual Studio 2008.

Я отредактировал свой файл sln, чтобы отразить изменения

Microsoft Visual Studio Solution File, Format Version 11.00

to

Microsoft Visual Studio Solution File, Format Version 10.00

Это позволило загрузить решение в VS2008. Впоследствии я редактировал каждый csproj, чтобы настроить таргетинг на Framework .NET 3.5.

Это позволило проектам скомпилировать

Я могу запустить его в режиме Release "правильно" (с некоторыми ошибками из-за изменений специфики .NET 4.0 до эквивалента 3.5)

Теперь в режиме отладки я получил следующее сообщение об ошибке alt text

Мой гугл-фу показал, что я могу испортить реестр при поиске по запросу «Приложение, которое вы пытаетесь отладить, использует версию». Он указал мне на эту страницу

Я почти уверен, что на этой странице есть ошибка, относящаяся к версии 8.0 для справочных страниц 2005 и 2008 годов. Итак, я сделал это, я создал раздел реестра CLRVersionForDebugging со значением "v3.5", как показано в каталоге в C:\Windows\Microsoft.NET\Framework

Теперь я получаю следующее сообщение: alt text

Я не могу найти подходящую информацию для решения этой проблемы. Это огромная боль. Я не хочу воссоздавать проекты вручную, есть сотни исходных / конфигурационных файлов. Любая помощь будет принята с благодарностью.

Вот пример файла проекта, который не будет отлаживать

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProductVersion>9.0.21022</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{61547F81-8F73-4E38-ACDB-B51253A90EBC}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>FlowchartEditor</RootNamespace>
    <AssemblyName>FlowchartEditor</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <PlatformTarget>x86</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <PlatformTarget>x86</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Editor.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Editor.Designer.cs">
      <DependentUpon>Editor.cs</DependentUpon>
    </Compile>
    <Compile Include="EditorMDI.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="EditorMDI.Designer.cs">
      <DependentUpon>EditorMDI.cs</DependentUpon>
    </Compile>
    <Compile Include="OutputSignalSelect.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="OutputSignalSelect.Designer.cs">
      <DependentUpon>OutputSignalSelect.cs</DependentUpon>
    </Compile>
    <Compile Include="Program.cs" />
    <Compile Include="PropertiesEditor.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="PropertiesEditorDisplayUnit.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="ToolboxForm.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="ToolboxForm.Designer.cs">
      <DependentUpon>ToolboxForm.cs</DependentUpon>
    </Compile>
    <EmbeddedResource Include="Editor.resx">
      <DependentUpon>Editor.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="EditorMDI.resx">
      <DependentUpon>EditorMDI.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="OutputSignalSelect.resx">
      <DependentUpon>OutputSignalSelect.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="PropertiesEditor.resx">
      <DependentUpon>PropertiesEditor.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
      <DesignTime>True</DesignTime>
    </Compile>
    <EmbeddedResource Include="ToolboxForm.resx">
      <DependentUpon>ToolboxForm.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <None Include="app.config" />
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\flowchart\flowchart\flowchart\flowchart.csproj">
      <Project>{4E7DDA00-651D-4CC0-833C-83E60ADE552B}</Project>
      <Name>flowchart</Name>
    </ProjectReference>
    <ProjectReference Include="..\PluginMiddleMan\PluginMiddleMan.csproj">
      <Project>{CDACB6A0-6DEC-48B6-B3B1-628968B50F5C}</Project>
      <Name>PluginMiddleMan</Name>
    </ProjectReference>
    <ProjectReference Include="..\ToolBox\ToolBox.csproj">
      <Project>{D937E1F4-1B9F-4567-B28E-EED24AA31C9C}</Project>
      <Name>ToolBox</Name>
    </ProjectReference>
    <ProjectReference Include="..\WinFormsUI\WinFormsUI.csproj">
      <Project>{C75532C4-765B-418E-B09B-46D36B2ABDB1}</Project>
      <Name>WinFormsUI</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

person Eric    schedule 08.10.2010    source источник
comment
Вы знаете, что можете настроить таргетинг на различные FW в VS2010 прямо ... в VS2008, если на то пошло. Пытаюсь понять, почему вы возвращаетесь к VS2008.   -  person Aaron McIver    schedule 08.10.2010
comment
Он мог бы быть членом команды, и он единственный пользователь 2010 года. Это могло быть проблематично.   -  person Mike Hofer    schedule 08.10.2010
comment
Да, Майк, именно поэтому. Я ошибаюсь ... когда я приехал, нашел iso VS2010, но все использовали 2008. Они сказали мне, что в конечном итоге перейдут, но теперь, похоже, у них нет надлежащего финансирования для этого   -  person Eric    schedule 08.10.2010
comment
Меня беспокоит второе сообщение об ошибке. Предлагается восстановить версию 2.0 платформы .NET. Может CLRVersionForDebugging поддерживает только 2.0 и ниже. Или, может быть, парсер тупой и ожидает в номере версии три токена. Вы пробовали V3.5.0?   -  person Frédéric Hamidi    schedule 08.10.2010


Ответы (4)


Возникает ли у вас такая же проблема, если вы начинаете новый тестовый проект в VS2008 и отлаживаете его? Если нет, то, возможно, вам будет лучше создать новые файлы csproj и перетащить существующие файлы кода в новый проект.

Лично, если ваша установка Visual Studio стабильна (другие проекты r2008 собираются нормально), я бы предпочел пойти по этому пути, чтобы испортить глобальное состояние в вашем реестре.

person JMarsch    schedule 08.10.2010
comment
Я знаю, но у меня есть около 175 исходных файлов для примерно 15 проектов с зависимостями, настраиваемыми путями сборки и другими подобными вещами. Это будет огромная боль - person Eric; 09.10.2010
comment
Кроме того, нет, у меня нет проблем с ванильным раствором. Однако решение для реестра никогда не работает ни при каких обстоятельствах, которые я пробовал. - person Eric; 09.10.2010
comment
@ Эрик: звучит не весело - ты уже нашел решение? Я бы по-прежнему склонялся к перестройке - это больно, но вы можете массово добавлять файлы в свои проекты, перетаскивая их из проводника Windows в обозреватель решений. Остальное (настраиваемые пути / настраиваемые действия) может занять полдня или дня, но тогда все готово, и вы знаете, что у вас есть, и вы знаете, что этот процесс будет работать. Только мои 0,02 доллара. В любом случае, наилучшие пожелания. - person JMarsch; 11.10.2010

Вы изменили "ToolsVersion" в списке файлов .csproj? Может быть полезно опубликовать пример одного из файлов проекта.

person Brian    schedule 08.10.2010
comment
да, я сделал, никакого эффекта. Думаю, это тоже не повредило, спасибо за предложение =) - person Eric; 09.10.2010

При установке VS 2008 SP1 у меня есть ключи AD7Metrics и AD7Metrics(Debug) под HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0. AD7Metrics действительно содержит {449EC4CC-30D2-4032-9256-EE18EB41B62B}. AD7Metrics(Debug) нет.

Попробуйте создать подраздел {449EC4CC-30D2-4032-9256-EE18EB41B62B} и его значение CLRVersionForDebugging в разделе AD7Metrics(Debug).

person Frédéric Hamidi    schedule 08.10.2010

Проверьте содержимое файла app.config в своем проекте. Он может содержать <requiredRuntime> или <supportedRuntime> элементы, ориентированные на .NET 4, что, вероятно, запутает отладчик.

РЕДАКТИРОВАТЬ: на время избавьтесь от значений CLRVersionForDebugging. Цель состоит в том, чтобы воспроизвести первое сообщение об ошибке (у меня плохое предчувствие по поводу второго ...)

person Frédéric Hamidi    schedule 08.10.2010