かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Azure Bot Services の Web App Bot で作成したボットのソースをダウンロードしてビルドしていると「**」というフォルダーが出来る

こんなやつです。

f:id:okazuki:20190417133622p:plain

ちなみにビルドを重ねていくとパスの長さに関するエラーが出ます。

原因

何のためなのか調べてないのですが、EchoBot の csproj ファイルには 以下のような定義が含まれています。

  <Import Project="PostDeployScripts\IncludeSources.targets" Condition="Exists('PostDeployScripts\IncludeSources.targets')" />
  <Import Project="..\PostDeployScripts\IncludeSources.targets" Condition="Exists('..\PostDeployScripts\IncludeSources.targets')" />

プロジェクトの PostDeployScripts フォルダーの IncludeSources.targets を見てると以下のような定義があります。

<None Include="**\*.csproj">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

こいつが csproj ファイルをビルドの度に延々と bin と obj の下にコピーし続けていって最終的に限界を迎えるとパスの長さのエラーになるという感じみたいです。

対処方法

bin と obj フォルダー以下は問答無用で除外しましょう。こんな風に書き換えます。

<None Include="**\*.csproj" Exclude="bin\**\*;obj\**\*" >
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

これでソリューションエクスプローラーから謎のフォルダーは消えます。 ビルドエラーにまで進展してしまった人はプロジェクトの bin と obj を消しましょう。