.NET Framework3.5のリリースと共にMSBuildもバージョンが上がっています。
その際に、今までのcsprojファイルだとC#3.0用のcscコンパイラが使用されません。
C#3.0のコードをコンパイルするには、既存のビルドファイルの以下の点を変更します。
- project要素にToolsVersion属性を追加する。
- 値は、3.5を指定します。
- プロパティTargetFrameworkVersionを追加する。
- 値は、v3.5を指定します。
- Framework3.5で追加されたDLLに関しては、Reference指定の際にRequiredTargetFramework要素を子要素として指定する。
- 値は、3.5を指定します。
- 共通ターゲットファイルをインポートしている場合は($MSBuildBinPath)を$(MSBuildToolsPath)に変更する。
- WinFx用の共通ターゲットファイルは、Microsoft.Commons.targets内にて自動的にバージョンを見て読み込まれるのでいらない。
これでとりあえずビルドできるようになります。
以下、サンプルビルドファイルです。
<?xml version="1.0" encoding="utf-8"?> <!-- vim:set ts=4 sw=4 et ws is nowrap ft=xml: --> <!-- サンプルプロジェクト用ビルドファイル 共通ターゲットファイルは、以下の場所にある。 ${.net frameworkインストールフォルダ}の下 vimから利用する場合は、以下のようにして実行する。 :!msbuild /t:Build,Run /p:TargetClass=クラス名 作成されたEXEファイルは以下のようにして実行する事が出来る。 $ GsfSamples.exe Gsf.Samples.Tmp.対象クラス名 --> <!-- 利用するツールバージョンは3.5のものを利用するよう設定. --> <Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- 共通プロパティの設定. --> <PropertyGroup> <!-- アセンブリ名 --> <AssemblyName>GsfSamples</AssemblyName> <!-- 出力形式 --> <OutputType>winexe</OutputType> <!-- ルート名前空間 --> <RootNamespace>Gsf.Samples.Tmp</RootNamespace> <!-- 最低限要求される.NET Frameworkのバージョン --> <MinFrameworkVersionRequired>2.0</MinFrameworkVersionRequired> <!-- ターゲットとする.NET Frameworkのバージョン --> <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> <!-- デバッグタイプ --> <DebugType>full</DebugType> <!-- シンボルの定義 --> <DefineConstants>DEBUG;TRACE;GSF</DefineConstants> </PropertyGroup> <!-- 実行するエントリポイントクラスの指定 TargetClassプロパティは、コマンドラインより渡される。 指定されていない場合は、既定のダミークラスを使用する。 --> <PropertyGroup> <TargetClass>DummyClass</TargetClass> </PropertyGroup> <!-- Runターゲット内にて使用されているプロパティの設定. --> <PropertyGroup> <!-- 実行時の引数 --> <StartArguments>$(RootNamespace).$(TargetClass)</StartArguments> <!-- アプリケーション内での作業ディレクトリ --> <StartWorkingDirectory></StartWorkingDirectory> </PropertyGroup> <!-- コンパイル系のターゲットにて利用されている項目の設定. --> <ItemGroup> <!-- 参照設定. --> <Reference Include="System"/> <Reference Include="System.Core"> <RequiredTargetFramework>3.5</RequiredTargetFramework> </Reference> <Reference Include="System.Data"/> <Reference Include="System.Data.DataSetExtensions"> <RequiredTargetFramework>3.5</RequiredTargetFramework> </Reference> <Reference Include="System.Drawing"/> <Reference Include="System.Drawing"/> <Reference Include="System.Transactions"/> <Reference Include="System.Windows.Forms"/> <Reference Include="System.Xml"/> <Reference Include="System.Xml.Linq"> <RequiredTargetFramework>3.5</RequiredTargetFramework> </Reference> <Reference Include="PresentationCore"/> <Reference Include="PresentationFramework"/> <Reference Include="WindowsBase"/> </ItemGroup> <ItemGroup> <!-- コンパイル対象. --> <Compile Include="*.cs"/> </ItemGroup> <!--=====================================================================--> <!-- 共通ターゲットファイルの読み込み. --> <!--=====================================================================--> <!-- 以下v3.5用の設定. --> <!-- C#用の共通ターゲット定義ファイル.(内部でCommon定義ファイルが読み込まれている.) --> <!-- 同時にTargetFrameworkVersionの値が3.0以上の場合はWinFX用の共通ターゲット定義ファイルも読み込まれる. --> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- 以下v2.0用の設定. --> <!-- C#用の共通ターゲット定義ファイル.(内部でCommon定義ファイルが読み込まれている.) --> <!--<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />--> <!-- WinFX用の共通ターゲット定義ファイル. --> <!--<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" /> --> </Project>
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場