LoginSignup
4
6

More than 5 years have passed since last update.

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

Posted at

小ネタだけど、日本語で書かれた資料が見当たらなかったので、とりあえず知っていることを書いておこう。(英語では 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を生成することも出来るはずだ。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6