1

我有一个使用 ClickOnce 部署的 Visual Basic 项目。

当我使用 ClickOnce 发布它时,我没有发现任何问题。

当我使用 msbuild.exe 发布它时,我遇到了一个问题。当用户启动应用程序时,他收到一条错误消息:The deployment identity does not match the subscription.

我对同一个日志文件也有警告:

WARNINGS
* The manifest for this application does not have a signature. Signature validation will be ignored.

搜索谷歌,我被引导相信我可以通过在 Visual Studio 和 msbuild.exe 之间使用相同的 pfx 文件来解决问题(它不会自动找到 pfx 文件)。

在项目文件(blahblahblah.vbproj)中有这个节点:

<PropertyGroup>
    ...
    <ManifestKeyFile>blahblahblah_TemporaryKey.pfx</ManifestKeyFile>
    ...
</PropertyGroup>

但是,在我的项目文件夹中,没有这样的文件。现在,Visual Studio 必须从某个地方获取该文件,因为我定期使用 Visual Studio 发布项目并且没有问题。

我还比较了生成的 2 个 blahblahblah.application 文件,唯一的区别在于版本(应该随每个出版物而改变)和 DigestValue。

<dependency>
    <dependentAssembly dependencyType="install" codebase="Application Files\blahblahblah_I_1_0_0_84\blahblahblah.exe.manifest" size="101425">
        <assemblyIdentity name="blahblahblah.exe" version="1.0.0.84" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="x86" type="win32" />
            <hash>
                <dsig:Transforms>
                    <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
                </dsig:Transforms>
                <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <dsig:DigestValue>lgzZRBBqxOOKi0IJcMCIBEWRU2A=</dsig:DigestValue>
            </hash>
        </dependentAssembly>
    </dependency>
</asmv1:assembly>

另外,您可以注意到,我有 publicKeyToken="0000000000000000",这对于两个版本都是相同的。

要解决此问题,用户必须卸载并重新安装该应用程序。不幸的是,这对我的客户来说是不可接受的,所以我必须找到解决方案。我可以尝试让他们接受一次,但我需要能够从 msbuild 或 Visual Studio 发布而没有此类冲突。

所以,我的问题是,我该怎么做才能让The deployment identity does not match the subscription错误永远消失?

4

1 回答 1

0

就丢失的 .pfx 而言...您是否曾经查看过 CertMgr.msc,特别是证书 - 当前用户\个人\证书?Visual Studio 很可能正在使用 SHA1 DigestValue 来匹配其中的代码签名证书的 SHA1 指纹。您应该能够右键单击 > 所有任务 > 导出... 并将私钥导出到 .pfx 容器中,然后您可以将其导入构建机器(进入 msbuild 使用的用户帐户)。

于 2015-04-29T01:22:21.447 回答