Application.UserAppDatapath奇妙な行動
-
09-09-2020 - |
質問
configsに到達するためにApplication.UserAppDataPathを使用すると、ArgumentExceptionが「パスに不正な文字」を持っています。
Microsoft IT ISバグではなく、機能;
fileversionInfo.productVersion(そしてapplication.productVersionおよびApplication.UserAppDataPath内で)不正文字を取得する方法は、アセンブリにAssemblyFileVersionを持つこともできます。 AssemblyFireDになる値はWin32リソースverbatimにコピーされ、AssemblyVersionに渡す値を上書きします。この動作は設計によるものです。
SO COMPLYSINGINFO.CSで[Assembly:AssemblyFirefersion( "...")]をコメントすることで、この例外を解決できます。
問題はです。 WinFormsコントロールでいくつかの.dllを書いています。このパスを入手するための最も簡単なデザインは、Application.UserAppDataPathを使用することです。ただし、Application.UserAppDataPathが使用されている場合、このライブラリを使用する開発者は、それらの.exeファイルに対してAssemblyFireversionを持つことができません。 (AssemblyFireversionがデフォルトでAssemblyInfo.csにあります)
また、Microsoftによる情報は、AssemblyFileVersionを使用する必要があり、誰かが使用しないでください。だから私は実際には、この図書館のユーザーからそれを尋ねることはできません。
そのような奇妙な状況には理由や論理がありますか? そのような問題なくApplication.UserAppDataPathパスを取得するためのより良い回避策とは何ですか?
AssemblyFireversionとApplication.UserAppDataPathが例外をスローし、アプリケーションは機能し、このパスを
で入手できます。string path = ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
.
設定ファイルはあり、問題ありません。しかし、確かに、それは醜い方法です。
解決
その投稿を正しく読んだ場合は、違法なchar( '*')でAssemblyFileVersion
を使用する必要があります。
適切にそれは「これがバグであると信じているのであれば」で終わる....
あなたはエラーを再現しました、そして現実的なシナリオだったのですか?