Noda Timeバージョン1.1の主な目標は、主にWindowsPhoneおよびWindowsStoreアプリをサポートするために、ポータブルクラスライブラリフレーバーを構築することです。これは一部の機能が失われることを意味するため、デスクトップ構成とPCL構成(デバッグ、リリース、および「署名付きリリース」のそれぞれについて)を構築します。
多数のプロジェクトファイルを操作する必要がないように、6つの構成すべてが同じプロジェクトファイルに存在します。プロジェクトファイルは、次のように「PCL」または「Desktop」のいずれかに設定される「Portability」と呼ばれるプロパティを生成するようにカスタマイズされます。
<!-- Set the custom Portability property based on configuration -->
<PropertyGroup>
<Portability Condition="'$(Configuration)' == 'Debug Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Release Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Signed Release Portable'">PCL</Portability>
<!-- Default to desktop if not explicitly set above -->
<Portability Condition="'$(Portability)' == ''">Desktop</Portability>
</PropertyGroup>
次に、上記のプロパティに基づいて、ポータブルとデスクトップの別々のプロパティグループがあります。これは、プロジェクトタイプを「クラスライブラリ」または「ポータブルクラスライブラリ」として定義するものです(共有されているOutputType
のと一緒に):Library
<!-- Desktop-specific properties -->
<PropertyGroup Condition="'$(Portability)' == 'Desktop'">
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<!-- PCL-specific properties -->
<PropertyGroup Condition="'$(Portability)' == 'PCL'">
<MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
<ProjectGuid>{c78f6992-28d7-45c9-a4c1-6eaa649f3247}</ProjectGuid>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile2</TargetFrameworkProfile>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
これは一般的に非常にうまく機能します-私はさまざまなソリューション構成を持っているので、すぐにすべてをビルドしてテストでき、新しい.cs
ファイルを1つのプロジェクトファイルに追加するだけで済みます。したがって、Visual Studio 2012 Professional(私が使用しているもの)では、完全に満足しています。
Visual Studio Express(VS2010またはVS2012)にソリューションを読み込もうとすると、問題が発生します。ソリューションのロード中に、一部のプロジェクトをロードできないというエラーで失敗し、PCLバージョンをビルドする2つのプロジェクトは、次のようなビルド出力を持ちます。
C:\Path\To\NodaTime.csproj : error :
The project file 'C:\Path\To\NodaTime.csproj' cannot be opened.
There is a missing project subtype.
Subtype: '{786C830F-07A1-408B-BD7F-6EE04809D6DB}'
is unsupported by this installation.
(わかりやすくするために再フォーマットされています。)2つのプロジェクトはロードを拒否するため、ソースコードを参照することもできません。
ExpressユーザーがPCLバージョンをビルドできなくても、ソリューションをロードし、ソースを参照し、PCL以外のバージョンをビルドできることを本当に望んでいました。MSBuildはコマンドラインから機能しますが、それはそれほど友好的ではありません。
PCLプロジェクト構成を参照するソリューション構成を削除しようとしましたが、役に立ちません。奇妙なことに、次のようにXML要素をコメントアウトすることもできます。
<!--
<ProjectTypeGuids>(Guids as before)</ProjectTypeGuids>
-->
行を削除しても役に立ちますが、役に立ちません。VisualStudioが実際に実際のXMLファイルとしてロードしていないかのようです。(コメントアウトされた要素を含むバージョンをVS Proにロードしようとはしていません。)
必要に応じて、個別のPCLプロジェクトファイルを生成するルートをたどることもできますが、可能であればそれを避けたいと思います。これにより、通常の開発がより困難になります。同様に、ExpressのみのPCLファイルとソリューションファイルを生成することもできましたが、やはり、生成したくありませんでした。
理想的には、2010年と2012年の両方でVS Expressをサポートしたいのですが、2012年にのみ機能するソリューションがあれば、それは良いスタートです。
では、Visual Studio Expressが、知らないプロジェクトタイプを参照する条件付きプロパティグループ(条件が満たされていない)にもかかわらず、プロジェクトを実際にロードできるように説得する方法はありますか?