デスクトップのC#プロジェクトをPCLプロジェクトに手作業で変換する


小ネタだけど、日本語で書かれた資料が見当たらなかったので、とりあえず知っていることを書いておこう。(英語では SOに同旨の質問があった。)

通常のC#プロジェクト (.csproj) をPCLのC#プロジェクト (.csproj) に変換するには、以下の(1)〜(3)を行えば良い。

(1) 最初のPropertyGroup要素の下に、以下を追加する。

<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

(実際には、最初のPropertyGroupである必然性は全然なくて、とにかく余計なConditionが無く必ず適用されるPropertyGroupであれば良い。)

他のProjectTypeGuidsがあれば、追加はせず、代わりにその内容を置き換える。

ちなみに、最初のGuidはPCLを、次のGuidはC#であることを示している。だから、もしPCLをサポートする他の言語のプロジェクトにしたい場合は、この値をその言語のGuidにする。

(2) 同じPropertyGroupの下に、以下を追加する:

<TargetFrameworkProfile>Profile78</TargetFrameworkProfile>

TargetFrameworkVersion要素と並んでいると明確で良い。

TargetFrameworkProfileの値は、指定したいPCLプロファイルの名前にする。 ここで注意すべきは、それぞれのプロファイル名は、それぞれ、特定のTargetFrameworkVersionの値を前提としているということだ。Profile78なら、TargetFrameworkVersionは v4.5 となる。

(3) ルートProject要素の最後の要素として、以下のデフォルトのImport要素

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

を削除し、代わりに以下を追加する:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />

以上で完了だ。分かってしまえば、スクリプトで自動的に.csprojを生成することも出来るはずだ。

January 3, 2016
31 words


Categories

Tags

Author

Backlog