自动生成的 AppData/Local 文件夹被“错误”创建

Jul*_*ien 8 .net c# windows

当我运行 .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" />\n
Run 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