我使用VS2008中的设置设计器管理我的应用程序设置.
"user.config文件的确切路径如下所示:"
<Profile Directory>\<Company Name>\
<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config
Run Code Online (Sandbox Code Playgroud)
有没有办法定制这条路径?我更喜欢这样的东西:
<Profile Directory>\<Company Name>\
<App Name>\<Version>\user.config
Run Code Online (Sandbox Code Playgroud)
我注意到新创建的文件夹("Test Company" - >"Test_Company")中的"公司名称"中的下划线替换了空格.我真的希望关闭这种行为.
你知道,我可以写一个新的基于XML的设置处理程序,但我想使用设置设计器.
当我运行 .net exe 时,会创建相应的文件夹C:\Users\UserName\AppData\Local\AppName
在此文件夹内,会创建另一个文件夹AppName_Url_ABCXYZ
在此文件夹内,还会为 .net exe 的程序集版本创建另一个文件夹0.2.28.0
谁能解释一下 Windows 如何决定创建二级文件夹AppName_Url_ABCXYZ?
当我增加程序集版本并执行单个文件发布并运行生成的 exe 时,我遇到问题,AppName_Url_ABCXYZ创建一个包含新程序集版本文件夹的新文件夹。
这会导致问题,因为它破坏了功能, Properties.Settings.Default.Upgrade()因为要升级的设置不再位于预期目录中
好的:
-AppData
-Local
-MyApp
-MyApp_Url_ABCXYZ
-0.2.13.0
-0.2.14.0
-0.2.15.0
Run Code Online (Sandbox Code Playgroud)
坏的:
-AppData
-Local
-MyApp
-MyApp_Url_ABC1
-0.2.13.0
-MyApp_Url_ABC2
-0.2.14.0
-MyApp_Url_ABC3
-0.2.15.0
Run Code Online (Sandbox Code Playgroud)
更新:
@Richard Deeming 提供的信息表明 appdata 文件夹的哈希部分是这样生成的:
var uri = "file:///" + fullExePath; //or 'assemblyName.CodeBase' if vshost (you can check the 'FriendlyName')
uri = uri.ToUpperInvariant();
var ms = new MemoryStream();
var bSer = new BinaryFormatter();
bSer.Serialize(ms, uri);
ms.Position …Run Code Online (Sandbox Code Playgroud) 所以,长话短说,我正在开发一个应用程序,它将使用一些可能在运行时通过应用程序本身更改的配置信息.出于我的目的,我想到了使用这个Settings课程.
我们认为问题在于,应用程序的不同运行之间不会保留信息:
运行1)
Console.WriteLine(Settings.Default["User"]); //prints "Default user"
Settings.Default["User"] = "abc";
Console.WriteLine(Settings.Default["User"]); //prints "abc"
Run Code Online (Sandbox Code Playgroud)
跑2)
Console.WriteLine(Settings.Default["User"]); //prints "Default user"
Settings.Default["User"] = "abc";
Console.WriteLine(Settings.Default["User"]); //prints "abc"
Run Code Online (Sandbox Code Playgroud)
(两者打印完全相同的输出)
两个运行都显示相同的第一个打印"默认用户",虽然在第二次运行时我想得到"abc",表明信息不是在不同的应用程序执行之间持久化.
我承认这必须与Visual Studio处理.config文件的方式有关,但即便如此,我想知道如何纠正这种(讨厌的)行为?