【问题标题】:VisualStudio.com can't load the temporary UWP certificate during buildsVisualStudio.com 在构建期间无法加载临时 UWP 证书
【发布时间】:2016-02-23 19:10:40
【问题描述】:

我设置了我的 Visual Studio Team Service 帐户来克隆我的私人 GitHub 存储库并在我排队构建时构建 Windows UWP 应用程序。克隆工作没有任何问题;除了一个之外,每个项目(6)的编译都有效。 Windows UWP 应用项目。

在构建服务器编译应用程序时,我收到以下警告:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(1778,5): 警告 APPX0104:找不到证书文件“myapp_TemporaryKey.pfx”。

2>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(1778,5): 警告 APPX0104:找不到证书文件“myapp_TemporaryKey.pfx”。 [C:\a\1\s\Source\Applications\myapp.WindowsUWP\myapp.csproj]

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(1778,5): 警告 APPX0102:在证书存储中找不到在项目中指定的带有指纹“58F2EA544193F6FC9F2737135570555B388E58D8”的证书。请在项目文件中指定一个有效的指纹。

2>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(1778,5): 警告 APPX0102:在证书存储中找不到项目中指定的带有指纹“58F2EA544193F6FC9F2737135570555B388E58D8”的证书。请在项目文件中指定一个有效的指纹。 [C:\a\1\s\Source\Applications\myapp.WindowsUWP\myapp.csproj]

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(1778,5): 警告 APPX0107:指定的证书对签名无效。有关有效证书的更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=241478。 2>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(1778,5): 警告 APPX0107:指定的证书对签名无效。有关有效证书的更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=241478。 [C:\a\1\s\Source\Applications\myapp.WindowsUWP\myapp.csproj]

这是 6 个要编译的项目中的最后一个。在我收到警告后,它会继续将所有输出文件复制到最终的 /bin 目录。然后当一切都完成后,报告与上面相同的消息,但这次是错误并且构建失败。

_GenerateAppxPackageFile: C:\Program Files (x86)\Windows Kits\10\bin\x64\MakeAppx.exe pack /l /h sha256 /f obj\x86\Debug\package.map.txt /o /p C:\a\1 \s\Source\Applications\MyApp.WindowsUWP\AppPackages\MyApp_1.0.0.0_x86_Debug_Test\MyApp_1.0.0.0_x86_Debug.appx
MyApp -> C:\a\1\s\Source\Applications\MyApp.WindowsUWP\AppPackages\MyApp_1.0.0.0_x86_Debug_Test\MyApp_1.0.0.0_x86_Debug.appx C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2382,5):错误 APPX0104:找不到证书文件“MyApp_TemporaryKey.pfx”。 2>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2382,5):错误 APPX0104:找不到证书文件“MyApp_TemporaryKey.pfx”。 [C:\a\1\s\Source\Applications\MyApp.WindowsUWP\MyApp.csproj] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2382,5):错误 APPX0102:不能在项目中指定带有指纹“58F2EA544193F6FC9F2737135570555B388E58D8”的证书在证书存储中找到。请在项目文件中指定一个有效的指纹。 2>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2382,5): error APPX0102: A certificate with thumbprint '58F2EA544193F6FC9F2737135570555B388E58D8' that is specified in the project在证书存储中找不到。请在项目文件中指定一个有效的指纹。 [C:\a\1\s\Source\Applications\MyApp.WindowsUWP\MyApp.csproj] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2382,5):错误 APPX0107:指定的证书对签名无效。有关有效证书的更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=241478。 2>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2382,5):错误APPX0107:指定的证书对签名无效。有关有效证书的更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=241478。 [C:\a\1\s\Source\Applications\MyApp.WindowsUWP\MyApp.csproj] 2>完成构建项目“C:\a\1\s\Source\Applications\MyApp.WindowsUWP\MyApp.csproj”(默认目标)——失败。 1>完成构建项目“C:\a\1\s\Source\MyApp.UWP.sln”(默认目标)——失败。 构建失败。 "C:\a\1\s\Source\MyApp.UWP.sln" (默认目标) (1) ->

如果我只是删除证书(就像我在这个特定的错误日志中所做的那样),它会失败,因为它找不到它。如果我在 VS 中使用清单编辑器生成证书,并为其分配密码,则构建服务器将失败,因为它不知道密码。所以无论我是否提供临时测试证书,我都无法构建它。

我们应该如何通过 Visual Studio Team Services 构建系统运行 Windows 10 UWP 应用?这是微软一直在推广的东西,所以我认为这是可以做到的。我似乎无法真正构建 UWP 项目。

【问题讨论】:

  • 因为我不需要签名,所以我只是通过将参数 /p:AppxPackageSigningEnabled=false 添加到 YAML 文件的 msbuildArgs 部分来禁用签名。

标签: msbuild visual-studio-2015 win-universal-app azure-devops build-server


【解决方案1】:

我也遇到了错误:

“无法导入密钥文件 'blah.pfx'。密钥文件可能受密码保护。要更正此问题,请尝试将证书手动导入当前用户的个人证书存储区”。

您可以双击一个 .pfx 文件将其导入您的商店,诀窍是当它调出向导时,您必须在第一个屏幕上选择“当前用户”,而不是“本地机器”,然后我特意选择了“个人”,而不是“自动”。

在那之后我能够构建包。当我选择“本地机器”+个人时不起作用。

【讨论】:

    【解决方案2】:

    我通过“安全文件”功能解决了这个问题:https://docs.microsoft.com/en-us/azure/devops/pipelines/library/secure-files?view=vsts

    1. 在构建管道中,有一个“库”选项卡。我在那里添加了 pfx(从源代码管理中排除)作为文件。
    2. 然后我添加了“下载安全文件”作为构建任务 (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/download-secure-file?view=vsts)。注意文档中的环境变量(当前为 $env:DOWNLOADSECUREFILE_SECUREFILEPATH)
    3. 然后我添加了一个命令行任务来将文件移动到预期的位置。所以命令是move %DOWNLOADSECUREFILE_SECUREFILEPATH% FolderOfMyProject

    现在它的行为就像证书已签入一样。

    【讨论】:

    • 这很漂亮,是迄今为止我能找到的面向公众的管道的最佳选择。匿名构建结果页面甚至不显示安全文件步骤。
    【解决方案3】:

    遇到同样的问题 (error APPX0107: The certificate specified is not valid for signing) 并尝试了所有解决方案,但对我没有任何效果。 事实上,它们是.csproj 中的键名之后的新行

    <PackageCertificateKeyFile>myCert.pfx
    </PackageCertificateKeyFile>
    

    删除它并且它工作。

    【讨论】:

      【解决方案4】:

      这几天遇到同样的问题,终于在this post的帮助下成功解决了。

      实际上我们必须确保我们已经创建了一个测试用的.pfx 作为UWP 的开发者 ,然后跟帖分享了一些我认为有用的解决方案:

      • 使用 VS 创建测试证书:

        1. 在 Visual Studio 中,从解决方案资源管理器中打开 Package.appxmanifest
        2. App Manifest Designer 中,选择Packaging 选项卡,然后选择选择Certificate 按钮。
        3. 在“选择Certificate”对话框中,展开“配置证书”列表,然后选择Create test certificate
        4. Create test certificate对话框中,输入您的信息并点击确定按钮。(以上步骤说明来自
      • 使用MakeCertPvk2PfxCertutil 工具创建证书

        1. MDSN : How to create an app package signing certificate

      希望对你有帮助!

      【讨论】:

        【解决方案5】:

        默认情况下.gitignore 忽略任何*.pfx 文件。因此它不会被添加到 git 中。我有同样的问题,构建机器没有*_StoreKey.pfx 文件,因此构建没有成功。

        对我来说,解决方案是在构建服务器上安装*_StoreKey.pfx。然后在构建服务器上构建解决方案成功。

        【讨论】:

        • 将存储密钥添加到源是否存在安全风险?我的意思是,当它是一个开源存储库时,它肯定会是,但对于私有/封闭存储库,它不应该是一个问题,对吧?
        • @Patric 取决于此私人复制品的位置。任何远程都应被视为安全风险。我,现在使用 TFSO 的Secure file 功能
        • 就我而言,我的解决方案中有我的 xx.pfx 文件。我收到密钥文件可能受密码保护错误...
        【解决方案6】:

        您可以在不分配密码的情况下生成证书。

        或者在您的构建定义中添加一个 PowerShell 步骤来导入受密码保护的证书。以下是您可以使用的 powershell 脚本:

        $pfxpath = 'myapp_TemporaryKey.pfx'
        $password = 'yourpassword'
        
        Add-Type -AssemblyName System.Security
        $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
        $cert.Import($pfxpath, $password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet")
        $store = new-object system.security.cryptography.X509Certificates.X509Store -argumentlist "MY", CurrentUser
        $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadWrite")
        $store.Add($cert)
        $store.Close()
        

        记得将“工作文件夹”设置为放置 pfx 文件的路径。

        【讨论】:

        • 谢谢你!我真的想象 MSBuild 会搜索证书存储,找到匹配的哈希并继续使用它。显然不是。
        • 这个解决方案非常适合我。只需要事先添加几件事:正如@Michael Mairegger 也提到的,确保将 pfx 文件包含在源代码控制签入中。还将“复制到输出目录”的 pfx 文件属性设置为 None(这是默认设置)以外的其他值,以确保将 pfx 文件复制到准备打包的 bin 文件夹中。
        猜你喜欢
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 2019-05-13
        • 1970-01-01
        • 2013-03-07
        • 2012-09-15
        相关资源
        最近更新 更多