[msbuild] 同一ソースコードのビルドで.NETを切り替えたい

Windows 8用の.NET 4.0ターゲットのビルドとWindows 7用の.NET 3.5ターゲットのビルドを同じソースコードから作成したいと思った。

projectのcsprojファイルを見ると、TargetFrameworkVersionというタグにv3.5と書かれている。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.30729</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{8C79DA2A-3E1C-431F-A366-CF5C010500B7}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Visual Studio(VS2010Pro)で構成マネージャーを使って構成を新規作成するとこの部分を切り替えられるか試してみたところ、TargetFrameworkVersionは各Configurationごとには存在しないのがデフォルトのようだ。全コンフィグレーションが同じ.NET frameworkを使用する設定ファイルしか作れないらしい。

試しに手元のsolutionを一度Visual Studioにロードして、テストようにConfigurationを定義した後で、そのConfigurationのPropertyGroupにTargetFrameworkVersionを追加してみるとこのconfigurationでは指定したFrameworkを使った実行形式が生成されるようだ。

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Win8Release64|x64'">
    <OutputPath>..\Win8Release64\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <DocumentationFile>..\Win8Release64\winmsu.XML</DocumentationFile>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>

ただし、手で書き換えたcsprojをVisual Studioでロードしたところエラーが発生したので、Visual Studioが期待する記述ではなくなるらしい。

stackoverflow.comを見ると、同じ趣旨の質問があり、回答がついていた。

C# Conditional Compilation and framework targets
http://stackoverflow.com/questions/2923210/c-sharp-conditional-compilation-and-framework-targets/2928835#2928835

Visual Studioとは関係なくビルド用のproject fileの作成が前提か。

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。