Application.UserAppDataPath奇怪的行为

时间:2011-05-22 21:59:00

标签: c# winforms assemblyinfo

当我使用Application.UserAppDataPath进行配置时,我遇到了ArgumentException“路径中的非法字符。”
据微软称is not a bug, but a feature;

  

在FileVersionInfo.ProductVersion中(以及因此在Application.ProductVersion和Application.UserAppDataPath中)获取非法字符的唯一方法是在程序集上也有AssemblyFileVersion。将AssemblyFileVersion的值逐字复制到Win32资源,并覆盖传递给AssemblyVersion的值。这种行为是设计使然。

因此,通过在AssemblyInfo.cs中评论[assembly:AssemblyFileVersion(“...”)],可以解决此异常。

问题是: 我正在用winforms控件编写一些.dll。获得此路径的最简单设计是使用Application.UserAppDataPath。但是如果使用Application.UserAppDataPath,则使用此库的开发人员不能使用AssemblyFileVersion作为其.exe文件。 (默认情况下,AssemblyFileVersion在AssemblyInfo.cs中)

此外,我找不到Microsoft的任何信息,使用AssemblyFileVersion应该制动我的应用程序而有人不应该使用它。所以我实际上不能从这个库用户那里问它。

在如此奇怪的情况下是否有理由或逻辑? 什么是更好的解决方法来获取没有这样的问题的Application.UserAppDataPath路径?

虽然我有AssemblyFileVersion而Application.UserAppDataPath会抛出异常,但应用程序正常工作,我可以通过

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

配置文件存在但没有问题。但是,当然,这是一种丑陋的方式。

1 个答案:

答案 0 :(得分:3)

如果我在Connect上正确阅读该帖子,则必须使用AssemblyFileVersion非法字符('*')。

以“如果你仍然相信这是一个错误”结束它......

您是否重现了错误,这是一个现实的场景?