かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Xamarin.Forms のプロジェクトでフォルダパスが長すぎてエラーになってしまうときの対処法

続編書きました。

blog.okazuki.jp

最近 Xamarin.Forms のプロジェクトを新規作成したあとにビルドエラーになるというかプロジェクト作成すらままならないという状況に出会うことが増えました。

まぁ本質的にはパスの長さの問題なので別にXamarinに限った話ではないのですが辛いところですね。 (Windows 10の最新バージョンではグループポリシーエディターでパス長の制限解除できるけど、それがVS2017で有効になるのかは知らない)

とまぁTwitterで愚痴ったところ、私以外にも起きてるという人がいるということなので共有しておきます。

なんか色々なパターンがあるのですが、例えばちょっと長めのプロジェクト名をつけてデフォルトのC:\Users\<username>\Documents\Visual Studio 2017\Projects以下に作成しようとするとこんな感じのメッセージが出たりします。

---------------------------
Microsoft Visual Studio
---------------------------
サブ プロジェクト 'LongLongPathApplicationSample.Client.UWP' の作成中にエラーが発生しました。ファイル名または拡張子が長すぎます。 (HRESULT からの例外:0x800700CE)
---------------------------
OK   
---------------------------

対処法1

とりあえず短いパスのフォルダに作るようにする。

まぁパスが長いのが問題ですからね…。でもデフォルトのパスを出来れば使いたい。

対処法2

ということなので以下のようなコマンドをうってみました。

subst d: C:\Users\kaota\Documents

これでDドライブがドキュメントフォルダになります。そして、Visual Studio 2017でDドライブの下のVisual Studio 2017\Projectsにプロジェクトを作ると無事成功!!

とはなりませんでした。

重大度レベル   コード   説明  プロジェクト  ファイル    行 抑制状態
エラー       "ResolveLibraryProjectImports" タスクが予期せずに失敗しました。
System.IO.PathTooLongException: 指定されたパス、ファイル名、またはその両方が長すぎます。完全限定型名は 260 文字未満で指定し、ディレクトリ名は 248 未満で指定してください。
   場所 System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
   場所 System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)
   場所 System.IO.Directory.CreateDirectory(String path)
   場所 Xamarin.Android.Tasks.ResolveLibraryProjectImports.Extract(DirectoryAssemblyResolver res, ICollection`1 jars, ICollection`1 resolvedResourceDirectories, ICollection`1 resolvedAssetDirectories, ICollection`1 resolvedEnvironments)
   場所 Xamarin.Android.Tasks.ResolveLibraryProjectImports.Execute()
   場所 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   場所 Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()   LongLongPathApplicationSample.Client.Android            

まだ長いのか…。ならばこうだ

subst /D d:
subst d: "C:\Users\kaota\Documents\Visual Studio 2017\Projects"

開きなおして実行すると、やったね!!

f:id:okazuki:20170908175733p:plain

まとめ

緩募。もっといい方法とかあれば。