“清单XML签名无效”

时间:2012-10-10 19:24:12

标签: c# deployment visual-studio-2012 xml-signature

操作系统:安装了.NET 4.5的Visual Studio Pro 2012的Windows 7 64位。

我在Visual Studios中使用了Publish选项,确保我点击了SignOignOnce清单并签署程序集。它仍然无法在另一台计算机上运行,​​并且说我没有有效的XML签名。我已粘贴下面的错误消息。

我还读过:How to move a ClickOnce deployment packageDo I have to sign my ClickOnce manifest?VS2012 .NET 4.0 Clickonce VSTO CryptographicException: SignatureDescription could not be created for the signature algorithm supplied和其他几个人。

我需要能够在.NET 4.0上部署我的程序,并且我无法访问另一个版本的Visual Studio。在此先感谢!

完成以下错误:


平台版本信息     Windows:5.1.2600.196608(Win32NT)     公共语言运行时:2.0.50727.3603     System.Deployment.dll:2.0.50727.3053(netfxsp.050727-3000)     mscorwks.dll:2.0.50727.3603(GDR.050727-3600)     dfdll.dll:2.0.50727.3053(netfxsp.050727-3000)     dfshim.dll:4.0.31106.0(Main.031106-0000)

SOURCES     部署网址:file:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application

错误摘要     下面是错误的摘要,这些错误的详细信息将在后面的日志中列出。     *激活C:\ Documents and Settings \ Administrator \ Desktop \ EatonWizard.application导致异常。检测到以下失败消息:         +来自file:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application的异常读取清单:清单可能无效或无法打开文件。         + Manifest XML签名无效。         无法为提供的签名算法创建+ SignatureDescription。

组件商店交易失败摘要     未检测到任何交易错误。

警告     在这次行动中没有任何警告。

操作进度状态     * [10/10/2012 2:05:02 PM]:已启动C:\ Documents and Settings \ Administrator \ Desktop \ EatonWizard.application的激活。

错误细节     在此操作期间检测到以下错误。     * [10/10/2012 2:05:02 PM] System.Deployment.Application.InvalidDeploymentException(ManifestParse)          - 来自file:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application的异常读取清单:清单可能无效或无法打开文件。          - 来源:System.Deployment         - 堆栈跟踪:             在System.Deployment.Application.ManifestReader.FromDocument(String localPath,ManifestType manifestType,Uri sourceUri)             在System.Deployment.Application.DownloadManager.DownloadDeploymentManifestDirectBypass(SubscriptionStore subStore,Uri& sourceUri,TempFile& tempFile,SubscriptionState& subState,IDownloadNotification notification,DownloadOptions options,ServerInformation& serverInformation)             在System.Deployment.Application.DownloadManager.DownloadDeploymentManifestBypass(SubscriptionStore子存储,Uri& sourceUri,TempFile& tempFile,SubscriptionState& subState,IDownloadNotification notification,DownloadOptions选项)             在System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri,Boolean isShortcut,String textualSubId,String deploymentProviderUrlFromExtension,BrowserSettings browserSettings,String& errorPageUrl)             在System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(对象状态)         ---内部例外---         System.Deployment.Application.InvalidDeploymentException(SignatureValidation)          - 清单XML签名无效。          - 来源:System.Deployment         - 堆栈跟踪:             在System.Deployment.Application.Manifest.AssemblyManifest.ValidateSignature(Stream s)             在System.Deployment.Application.ManifestReader.FromDocument(String localPath,ManifestType manifestType,Uri sourceUri)         ---内部例外---         System.Security.Cryptography.CryptographicException          - 无法为提供的签名算法创建SignatureDescription。          - 来源:System.Security         - 堆栈跟踪:             在System.Security.Cryptography.Xml.SignedXml.CheckSignedInfo(AsymmetricAlgorithm key)             在System.Security.Cryptography.Xml.SignedXml.CheckSignatureReturningKey(AsymmetricAlgorithm& signingKey)             在System.Deployment.Internal.CodeSigning.SignedCmiManifest.Verify(CmiManifestVerifyFlags verifyFlags)             在System.Deployment.Application.Manifest.AssemblyManifest.ValidateSignature(Stream s)

组件商店交易细节     没有可用的交易信息。

2 个答案:

答案 0 :(得分:36)

我今天遇到了同样的问题。这就是我解决的问题:

导致问题的原因: 我们使用vs2012和framework 4.5创建了一个clickonce项目。 然后我们将目标框架更改为4.0(客户要求)。

问题是:Framework 4.5使用SHA-256算法进行签名,4.0使用SHA-1。当我们将目标框架更改为4.0并且vs2012没有更改算法时。

解决方案:手动更改算法,生成新证书。

转到项目属性 - >签

您将看到“签名算法”中使用的算法。您可以创建一个新的测试证书,然后您会注意到它变为'sha1RSA'

答案 1 :(得分:2)

注意,我会将此作为评论添加,但由于愚蠢的声誉规则,我只能添加答案!


注意新的代码签名证书

我最近遇到了这个问题,因为我们的代码签名证书需要续订。因此,对于Microsoft在ClickOnce部署期间没有修补XP版本的Framework 4以使用SHA2证书的事实,我告诉我所有的clickonce项目都使用新的代码签名证书。

由于我还对应用程序进行了基于代码的更新,而不是让微软处理它,因此对于最终用户而言,它是一种更加无缝的体验,而无需按下按钮和我的应用程序风格。

但是,我遇到了一个错误,我的程序没有报告清单错误,而是挂起(我的坏!)。为了获得更新,我们在工作到凌晨3点之后发现了这个问题,我不得不创建一个由Visual Studio发布的临时证书。问题呢?代码更新不再是无缝的了,因为当发布者不为人知时,微软会把一个愚蠢的对话放进去!

所以我最关心的是,好的,从周一开始不支持XP,但这并不意味着框架4不应该接受新证书,如果这是他们向所有人推送的。微软甚至积极参与这一推动!

唯一可行的答案是,如上所述,你必须使用Visual Studio创建一个不受信任的临时证书,这是荒谬的! (我仍然希望我没有找到使用新证书的正确方法)