none
visual studio 2015 프로젝트를 visual studio 2005에서 호환 하려합니다. RRS feed

  • 질문

  • 만들어진 프로젝트는 visual studio 2015인데요.

    전달되어지는 곳은 visual studio 2005입니다. 

    2015에서 저장을 2005버전으로 저장할수 있나요?

    2016년 8월 12일 금요일 오전 4:19

답변

  • 그렇게 해야 하는 이유는 잘 모르겠지만, 일단 VS2015 도구 상에서 프로젝트 및 솔루션을 VS2005 버전으로 저장할 수는 없습니다. 또한 그 둘은 포맷 버전이 다르며 상위 버전인 VS2015가 VS2005에서 생성된 프로젝트를 열어 마이그레이션을 시도할 수는 있지만, 하위 버전인 VS2005에서는 상위 버전인 VS2015에서 생성한 프로젝트 파일은 인식하지 못합니다.

    두 버전 간에는 환경적인 차이가 존재하기 때문에 지원할 수 있는 SDK 및 라이브러리들이 차이가 있을 것입니다. 그러므로 기본적으로는 그대로 열려고 시도하기 보다는 VS2015에서 개발한 소스를 기반으로 VS2005에서 새로운 프로젝트를 만들거나 가져오기를 해서 빌드하고 호환성을 맞춰가는 시도를 하는 것이 바람직하다고 생각됩니다.

    그렇지 않고 어떤 사정에 의하여 프로젝트를 그대로 열기를 원하신다면, 다음과 같이 .sln 파일 및 .vcproj / .csproject 파일의 포맷을 VS2005 스타일로 고쳐서 열어보는 것을 시도할 수는 있습니다.

    VS2015 솔루션 파일 (.sln)

    Microsoft Visual Studio Solution File, Format Version 12.00
    # Visual Studio 14
    VisualStudioVersion = 14.0.25420.1
    MinimumVisualStudioVersion = 10.0.40219.1
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication2", "ConsoleApplication2\ConsoleApplication2.csproj", "{D2E84463-1251-48CA-8D41-2772664D16A3}"
    EndProject
    Global
     GlobalSection(SolutionConfigurationPlatforms) = preSolution
      Debug|Any CPU = Debug|Any CPU
      Release|Any CPU = Release|Any CPU
     EndGlobalSection
     GlobalSection(ProjectConfigurationPlatforms) = postSolution
      {D2E84463-1251-48CA-8D41-2772664D16A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
      {D2E84463-1251-48CA-8D41-2772664D16A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
      {D2E84463-1251-48CA-8D41-2772664D16A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
      {D2E84463-1251-48CA-8D41-2772664D16A3}.Release|Any CPU.Build.0 = Release|Any CPU
     EndGlobalSection
     GlobalSection(SolutionProperties) = preSolution
      HideSolutionNode = FALSE
     EndGlobalSection
    EndGlobal 
    

    위의 스크립트에서 굵은 글씨로 된 부분은 아래의 VS2005 스타일로 변경합니다.

    VS2005 스타일 솔루션 파일 (.sln)

    Microsoft Visual Studio Solution File, Format Version 9.00
    # Visual Studio 2005
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication1", "ConsoleApplication1\ConsoleApplication1.csproj", "{C61E3633-93D4-4DF7-AF33-1A19DFBE7C07}"
    EndProject
    Global
     GlobalSection(SolutionConfigurationPlatforms) = preSolution
      Debug|Any CPU = Debug|Any CPU
      Release|Any CPU = Release|Any CPU
     EndGlobalSection
     GlobalSection(ProjectConfigurationPlatforms) = postSolution
      {C61E3633-93D4-4DF7-AF33-1A19DFBE7C07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
      {C61E3633-93D4-4DF7-AF33-1A19DFBE7C07}.Debug|Any CPU.Build.0 = Debug|Any CPU
      {C61E3633-93D4-4DF7-AF33-1A19DFBE7C07}.Release|Any CPU.ActiveCfg = Release|Any CPU
      {C61E3633-93D4-4DF7-AF33-1A19DFBE7C07}.Release|Any CPU.Build.0 = Release|Any CPU
     EndGlobalSection
     GlobalSection(SolutionProperties) = preSolution
      HideSolutionNode = FALSE
     EndGlobalSection
    EndGlobal
    


    또한, 프로젝트 파일들은 다음과 같이 변경합니다.

    VS2015 프로젝트 파일 (C# 프로젝트, .csproj 의 경우)

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProjectGuid>{D2E84463-1251-48CA-8D41-2772664D16A3}</ProjectGuid>
        <OutputType>Exe</OutputType>
        <AppDesignerFolder>Properties</AppDesignerFolder>
        <RootNamespace>ConsoleApplication2</RootNamespace>
        <AssemblyName>ConsoleApplication2</AssemblyName>
        <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <PlatformTarget>AnyCPU</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|AnyCPU' ">
        <PlatformTarget>AnyCPU</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.Data" />
        <Reference Include="System.Xml" />
      </ItemGroup>
      <ItemGroup>
        <Compile Include="Program.cs" />
        <Compile Include="Properties\AssemblyInfo.cs" />
      </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>
    

    위의 프로젝트 파일은 아래의 VS2005 스타일로 변경합니다.

    특히, 하단의 Import에서 $(MSBuildToolsPath) 이 부분은 이전 스타일인 $(MSBuildBinPath)로 변경되어야 합니다.

    VS2005 스타일 C# 프로젝트 파일 (.csproj)

    <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProductVersion>8.0.50727</ProductVersion>
        <SchemaVersion>2.0</SchemaVersion>
        <ProjectGuid>{C61E3633-93D4-4DF7-AF33-1A19DFBE7C07}</ProjectGuid>
        <OutputType>Exe</OutputType>
        <AppDesignerFolder>Properties</AppDesignerFolder>
        <RootNamespace>ConsoleApplication1</RootNamespace>
        <AssemblyName>ConsoleApplication1</AssemblyName>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <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|AnyCPU' ">
        <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.Data" />
        <Reference Include="System.Xml" />
      </ItemGroup>
      <ItemGroup>
        <Compile Include="Program.cs" />
        <Compile Include="Properties\AssemblyInfo.cs" />
      </ItemGroup>
      <Import Project="$(MSBuildBinPath)\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>
    

    이 외에 발생할 수 있는 버전별 차이점은 일일히 확인하여 걷어내거나 변경해야 합니다.

    변환 작업에 참고하시기 바랍니다.

    2016년 10월 17일 월요일 오전 6:38