表題の通りですが、.
を含むプロジェクトを含んだソリューションをmsbuildを使って
なおかつ/tパラメータでビルドするプロジェクトを指定しようとするとなぜかうまくいきません。
理由は、msbuildが.slnを.metaprojに変換するときにプロジェクト名に含まれる.
を_
に置換してしまうかららしいです。
なので、たとえばこういう古いUniversalプロジェクトで見かけるコマンドライン
msbuild App1.sln /t:App1\App1.Windows
これは
msbuild App1.sln /t:App1\App1_Windows
と書き換えるとうまく動きます。
なぜこうなっているかはよくわかりませんが、MSBuildがうまくいかない時はmetaprojを生成させて、そのファイルを読むとわかるかも。
metaprojを生成するにはmsbuildemitsolution環境変数に1を設定してあげるといいです。たとえばこんな感じ。
> set msbuildemitsolution=1 > msbuild App1.sln
こうすると、App1.slnの隣にApp1.sln.metaprojというファイルができます。こっちがmsbuildが解釈するプロジェクト形式なので ここを見てあげると今回のような実はプロジェクト名が書き変わっていたということに気づけます。というかこれを出力させるまで全く分からなくて1日使いました。