C# ClickOnce部署恐怖

C# ClickOnce部署恐怖,c#,winforms,visual-studio-2015,clickonce,mage,C#,Winforms,Visual Studio 2015,Clickonce,Mage,ClickOnce部署后,我在签署应用程序时遇到问题 该应用程序是一个winforms项目,包含3个类库项目,并部署到共享文件路径 从Visual Studio works发布,如果我运行该应用程序,它将正常安装,尽管Windows 10中有关于它无法识别的警告: 因此,作为一个愚蠢的程序员,我想我应该尝试删除用户的警告信息 第一步是创建一个签名证书。幸运的是,系统管理员能够为我准备一个内部证书,我设法解决了如何将其导出 然后我过去常在舱单上签名。在这个阶段,我不知道什么是“清单”。在何处查

ClickOnce部署后,我在签署应用程序时遇到问题

该应用程序是一个winforms项目,包含3个类库项目,并部署到共享文件路径

从Visual Studio works发布,如果我运行该应用程序,它将正常安装,尽管Windows 10中有关于它无法识别的警告:

因此,作为一个愚蠢的程序员,我想我应该尝试删除用户的警告信息

  • 第一步是创建一个签名证书。幸运的是,系统管理员能够为我准备一个内部证书,我设法解决了如何将其导出
  • 然后我过去常在舱单上签名。在这个阶段,我不知道什么是“清单”。在何处查找Mage也是一个问题,因为部署服务器上未安装Windows SDK。我最终远程进入了部署服务器,并从自己的PC上运行了Mage。使用Mage对随机文件进行签名,我最终发现我需要对的文件结构中提到的所有.application+.manifest文件进行签名
  • 此时,我遇到了清单中的
    引用与下载程序集的标识不匹配的错误
    ,在用尽了清单中提到的10种不同尝试之后,我开始在这里发布
  • 然后我找到了他们认为文件在某种程度上已经损坏的地方。哪个文件?在比较了之前和之后的文件之后,我注意到.application文件仍然具有.manifest文件的product key=“000000000000000”,而不是新签名的产品密钥
  • 所以我回到法师那里,为清单重新选择了“应用程序引用”,并再次签名。此时,我遇到另一个错误
    无法找到路径\\MyFileShare\Application%20Files\MyApplication\u 1\u 0\u 0\u 23\MyApplication.exe.manifest的一部分
  • 最终我发现Mage用URL编码破坏了文件路径。我将记事本中的
    %20
    修改为
    ,并再次在法师中辞职,它成功了
我肯定做错了什么,而微软并没有打算让这件事变得如此困难


太长,读不下去了
在一次点击中运行Mage对应用程序进行签名的正确方法是什么,而不必手动编辑文件并多次退出?

以我的经验,自动工具可以很好地处理ClickOnce及其相关工具的所有输入和输出,但手工操作是一个真正的挑战

对我非常有用的资源是和

选项:

  • 使用Visual Studio提供的自动化工具来签署和部署应用程序。(它也有缺点,但至少在某种程度上是可行的)
  • 像您目前所做的那样,花大量时间自动化和调整您的流程。最终你会从中受益,因为你对最终结果有更多的控制权
  • 使用其他一些部署方法,如MSI

正如Marco Guignard在评论中指出的,可以将从任何地方创建的证书导出到您的个人存储中,以在Visual Studio中使用


在VisualStudio()中签名并设置单独的发布+安装位置可以让我完全不需要使用mage

我不确定它在2015年是否在同一个地方,但在2010年的项目属性中,在“发布”选项卡的上方有一个“签名”选项卡。对于我的ClickOnce项目,它有一个“签署ClickOnce清单”复选框@是的,我有这个选项-但是我在开发环境中没有访问证书的权限,所以我需要在部署后进行签名。我不知道如何在开发环境中“你不能访问证书”?您管理此证书并将其传送到生产环境(与应用程序一起),管理员的工作是将您的证书添加到受信任的开发人员存储中。@MarcoGuignard它是一个内部证书,位于单独的Active Directory域中(对于我来说是外部的),我可以将VPN作为不同的用户部署到生产环境中。如果排除ClickOnce,Microsoft将为Visual Studio提供MSI类型的安装程序项目。还有Squirrel,它是一个自更新程序,VSCode也使用它。