ClickOnce的 deps.json文件名不正确

编程语言 2026-07-11

我正在为.NET 9开发一个ClickOnce SDK项目。我已经从.NET 4.8升级。

问题在于在构建过程中生成的 MyApp.deps.json 文件,在进入应用程序文件负载文件夹时被重命名为 app.publishMyApp.deps.json

名称 app.publishMyApp.deps.json 显然是错误的,也不是.NET期望的,因此启动时出现错误(期望的名称是 MyApp.deps.json)。

这个名字看起来像是发布文件夹名称(app.publish)以某种方式被追加到文件名之前。原因我也不知道。它在我的其他ClickOnce SDK项目中并没有发生。

它是在MSBuild的 Publish任务的某个阶段发生的。

以下是在Visual Studio构建后,使用这个MSBuild Publish任务时我可以复现的问题:

msbuild MyApp.csproj /t:Publish 
                     /p:PublishDir="C:\temp\MyAppPublish" 
                     /p:PublishProtocol=ClickOnce 
                     /p:MapFileExtensions=false 
                     /p:GenerateManifests=true

我注意到其实是发布路径中的叶节点(MyAppPublish)决定了被追加的前缀。因此根据这个参数,我可以得到 app.publishMyApp.deps.jsonMyAppPublishMyApp.deps.json

下面是来自Publish任务的一些输出,展示了错误发生的位置:

_CopyResolvedFilesToPublishAlways

将文件从 "D:\a\1\b\MyApp\app.publishMyApp.deps.json" 复制到 "D:\a\1\b\Test\MyApp\app.publish\MyApp.deps.json"。

复制到应用程序文件:

_CopyFilesToPublishFolder:

将文件从 "D:\a\1\b\MyApp\app.publishMyApp.deps.json" 复制到 "D:\a\1\b\MyApp\app.publish\Application Files\MyApp_2026_309_1647_45076\app.publishMyApp.deps.json"。

有意思的是,第一步复制实际上将文件重命名为期望的名称,但第二步将其直接复制到载荷文件夹中(那就是最终在客户端机器上安装的那个位置)。

有人知道这是怎么回事吗?或者如何修复?

解决方案

尝试在 PublishDir 结尾处加一个斜杠

msbuild MyApp.csproj ^
  /t:Publish ^
  /p:PublishDir="C:\temp\MyAppPublish\" ^
  /p:PublishProtocol=ClickOnce ^
  /p:MapFileExtensions=false ^
  /p:GenerateManifests=true

结尾的斜杠可以防止叶子文件夹被解释为文件身份的一部分,这可能是原因。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章