System.IO.PathTooLongException – Xamarin

Olá, se você é desenvolvedor ou estudante de Xamarin e utiliza o Windows como ambiente de desenvolvimento, já se deparou com essa exception ou irá se deparar um dia.

Antes de começar a explicar como resolver esse problema, irei explicar um pouco sobre o que é a System.IO.PathTooLongException.

Exception

Severity Code Description Project File Line Suppression State
 Error The "ConvertResourcesCases" task failed unexpectedly.
 System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
 at System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
 at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
 at System.IO.Path.InternalGetDirectoryName(String path)
 at System.IO.Path.GetDirectoryName(String path)
 at Xamarin.Android.Tools.Files.CopyIfChanged(String source, String destination)
 at Xamarin.Android.Tasks.MonoAndroidHelper.CopyIfChanged(String source, String destination)
 at Xamarin.Android.Tasks.ConvertResourcesCases.FixupResources(ITaskItem item, Dictionary`2 acwMap)
 at Xamarin.Android.Tasks.ConvertResourcesCases.FixupResources(Dictionary`2 acwMap)
 at Xamarin.Android.Tasks.ConvertResourcesCases.Execute()
 at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
 at Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext() MeuApp.XamarinForms.Mobile.Android

Essa exceção ocorre quando o seu projeto contém algum caminho absoluto que ultrapassa o tamanho máximo de 260 caracteres ou contenha algum diretório com o nome maior que 248 caracteres, porém, na maioria das vezes acontece devido ao tamanho do caminho absoluto,  principalmente quando você vai executar o seu projeto Xamarin para a plataforma android, e a aplicação vai acessar alguma library lá na sua pasta “obj” e o caminho absoluto ultrapassa o valor máximo permitido.

Por exemplo, supondo que uma determinada library de seu projeto contenha o seguinte caminho absoluto:

C:\Projetos\Xamarin\MeuApp.XamarinForms.Mobile\trunk\src\XamarinForms\Mobile\MeuApp.XamarinForms.Mobile\obj\Debug\__library_projects__\Xamarin.Android.Support.v7.AppCompat\library_project_imports\res\drawable\abc_list_selector_background_transition_holo_light.xml

Neste exemplo o caminho absoluto possui 263 caracteres, dessa forma estourando o limite máximo.

Solução

Uma das soluções seria mudar a estrutura de pasta do seu projeto, ou seja, colocar o seu projeto em outra pasta para que o caminho absoluto fique menor. Porém, nem sempre isso é possível, um caso bastante comum é empresas de desenvolvimento de Software terem uma estrutura de pastas padrão para seus projetos, dessa forma essa solução acaba se tornando inviável, já que teria que mudar a estrutura de pasta de todos os projetos da empresa, devido a um único projeto.

A  solução proposta nesse post é mapear uma pasta local para uma letra de unidade no Windows, dessa forma diminuindo o tamanho do caminho absoluto do seu projeto.

Passo 1

Abra o Prompt de comando do windows.

Passo 2

Digite o comando “subst” e a letra de unidade que deseja utilizar acompanhada de “:”, em seguida digite o caminho do seu projeto que deseja mapear, de acordo com o exemplo demonstrado a seguir:

subst x: C:\Projetos\Xamarin\MeuApp.XamarinForms.Mobile\trunk\src\XamarinForms\Mobile\

Passo 3

Pressione a tecla Enter

Pronto, agora em seu computador terá uma unidade de disco “X:”, como na imagem a seguir:

print1

“X:” será um mapeamento para a pasta onde encontra-se o seu projeto.

Agora abra a sua solution no Visual Studio, selecionando-a através do “X:”, desse modo o caminho absoluto de seu projeto será menor, respeitando o limite máximo de 260 caracteres.  Veja o resultado no exemplo abaixo:

X:\MeuApp.XamarinForms.Mobile\obj\Debug\__library_projects__\Xamarin.Android.Support.v7.AppCompat\library_project_imports\res\drawable\abc_list_selector_background_transition_holo_light.xml

2 comentários em “System.IO.PathTooLongException – Xamarin

    1. Olá Raibom,

      Verifique se mesmo depois de implementar a solução, se o caminho do seu projeto está menor que o limite máximo de 260 caracteres.

      Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s