Pergunta

Quando uso Application.UserAppDataPath para acessar as configurações, recebo uma ArgumentException "Caracteres ilegais no caminho".
De acordo com a Microsoft não é um bug, mas um recurso;

A única maneira de obter um caractere ilegal em FileVersionInfo.ProductVersion (e, portanto, em Application.ProductVersion e Application.UserAppDataPath) é quando você também tem AssemblyFileVersion no assembly.O valor que vai para AssemblyFileVersion é copiado literalmente para os recursos Win32 e substitui o valor que você passa para AssemblyVersion.Esse comportamento ocorre por design.

Então, comentando [assembly:AssemblyFileVersion("...")] em AssemblyInfo.cs pode-se resolver esta exceção.

O problema é:Estou escrevendo alguns .dll com controles winforms.O design mais fácil para obter esse caminho seria usar Application.UserAppDataPath.Mas se Application.UserAppDataPath for usado, os desenvolvedores que usam esta biblioteca não poderão ter AssemblyFileVersion para seus arquivos .exe.(Enquanto AssemblyFileVersion está em AssemblyInfo.cs por padrão)

Além disso, não consegui encontrar nenhuma informação da Microsoft de que o uso do AssemblyFileVersion deveria travar meu aplicativo e alguém não deveria usá-lo.Então, na verdade, não posso perguntar isso aos usuários desta biblioteca.

Existe uma razão ou lógica em uma situação tão estranha?Qual é a melhor solução para obter o caminho Application.UserAppDataPath sem esses problemas?

Embora eu tenha AssemblyFileVersion e Application.UserAppDataPath lançaria a exceção, o aplicativo funciona e eu poderia passar por esse caminho

string path = ConfigurationManager.OpenExeConfiguration(
            ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

Os arquivos de configuração estão lá e não apresentam problemas.Mas, certamente, é uma maneira feia.

Foi útil?

Solução

Se eu li aquela postagem no Connect corretamente, você deve usar AssemblyFileVersion com um caractere ilegal ('*').

Apropriadamente termina com "Se você ainda acredita que isso é um bug"....

Você reproduziu o erro e esse era um cenário realista?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top