当我运行 .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 = 0;
var sha1 = new SHA1CryptoServiceProvider();
var hash = sha1.ComputeHash(ms);
var hashstring = ToBase32StringSuitableForDirName(hash);
Run Code Online (Sandbox Code Playgroud)
这是没有意义的,因为 exe 路径没有改变
使用全新的 WPF .net 6 应用程序并增加程序集版本时不会出现此问题,因此它是我的应用程序特有的。
在 Windows 资源管理器中检查生成的 exe 没有帮助,它们看起来相同。
更新:
我一直无法确定为什么我的项目中会发生这种情况。我什至不知道如何调试它。我从未有意改变这种行为。
小智 1
在这里下载整个项目包 \xe2\x80\x93 ConsoleApp1.zip
\n为了进行演示,让我们创建一个简单的控制台应用程序:
\n\n并添加一个链接:
\n<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />\nRun Code Online (Sandbox Code Playgroud)\n我们还将添加 Settings.settings 项目属性文件。\n因此,我们得到一个具有以下配置的项目:
\n\n在调试模式下编译并运行ConsoleApp1.exe的结果后,我们沿着路径C:\\Users\\Administrator\\AppData\\Local\\ConsoleApp1得到如下图:
\n\n在此文件夹内将有一个包含程序版本号的文件夹:
\n\n编译release版本并运行ConsoleApp1.exe的结果时,我们沿着路径C:\\Users\\Administrator\\AppData\\Local\\ConsoleApp1得到如下图:
\n\n在这个新文件夹中还将有一个包含程序版本号的文件夹:
\n\n需要注意的是,程序的debug版和release版会创建不同的文件夹。\xe2\x80\x83
\n当您更改项目版本时,新版本将分别出现在 debug 和 release 文件夹中:
\n\n\n调试程序和发布程序是同一项目的不同编译“版本”,并创建不同的 URL 将它们分开。
\n在这里下载整个项目包 \xe2\x80\x93 ConsoleApp1.zip
\n| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |