2

当我使用 Application.UserAppDataPath 访问配置时,我得到了 ArgumentException“路径中的非法字符”。
根据微软的说法,这不是一个错误,而是一个特性;

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

因此,通过在 AssemblyInfo.cs 中注释 [assembly: AssemblyFileVersion("...")] 可以解决此异常。

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

此外,我找不到 Microsoft 提供的任何信息,表明使用 AssemblyFileVersion 应该会阻止我的应用程序并且有人不应该使用它。所以我,实际上,不能从这个图书馆用户那里问它。

在这种奇怪的情况下是否有原因或逻辑?获得没有此类问题的 Application.UserAppDataPath 路径的更好解决方法是什么?

虽然我有 AssemblyFileVersion 并且 Application.UserAppDataPath 会引发异常,但应用程序可以工作,我可以通过这条路径

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

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

4

1 回答 1

3

如果我正确阅读了 Connect 上的那篇文章,则必须使用AssemblyFileVersion非法字符 ('*')。

适当地以“如果你仍然相信这是一个错误”结尾......

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

于 2011-05-22T22:18:56.340 回答