Когда я использую Application.UserAppDataPath для доступа к конфигам, я получаю ArgumentException «Недопустимые символы в пути».
По мнению Microsoft, это не ошибка, а функция;
Единственный способ получить недопустимый символ в FileVersionInfo.ProductVersion (и, следовательно, в Application.ProductVersion и Application.UserAppDataPath) - это когда в сборке также имеется AssemblyFileVersion.Значение, которое передается AssemblyFileVersion, дословно копируется в ресурсы Win32 и переопределяет значение, которое вы передаете AssemblyVersion.Это поведение является заданным.
Таким образом, комментируя [Assembly: AssemblyFileVersion ("...")] в AssemblyInfo.cs, можно разрешить это исключение.
Проблема в : я пишу .dll с элементами управления winforms.Самый простой способ получить этот путь - использовать Application.UserAppDataPath.Но если используется Application.UserAppDataPath, то разработчики, использующие эту библиотеку, не могут иметь AssemblyFileVersion для своих файлов .exe.(Хотя AssemblyFileVersion находится в AssemblyInfo.cs по умолчанию)
Также я не смог найти никакой информации от Microsoft, что использование AssemblyFileVersion должно тормозить мое приложение, а кто-то не должен его использовать.Так что я, на самом деле, не могу спросить об этом у пользователей этой библиотеки.
Есть ли причина или логика в такой странной ситуации?Какой лучший способ обойти путь Application.UserAppDataPath без таких проблем?
Хотя у меня есть AssemblyFileVersion и Application.UserAppDataPath выдает исключение, приложение работает, и я мог бы получить этот путь через
string path = ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
Конфигурационные файлы есть и не имеют проблем.Но, конечно, это безобразный способ.