如何正确签署winmd文件?

时间:2013-06-26 20:04:47

标签: windows-runtime windows-store-apps signing strongname

我们正在发送已签名的Windows运行时组件。目前我们签署了这样的winmd:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe -R MyComponent.winmd mykeypair.snk

这需要最坏的硬编码路径(假设您使用的是64位构建并且具有完全v8.0A)..或者至多需要在构建之前设置环境变量

在Visual Studio中,Windows运行时组件的“项目”页面上还有一个名为“签名”的部分。如果我检查签名框并选择一个合适的密钥文件,它似乎工作正常,但不会正确签名:

sn -vf MyComponent.winmd

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.17929
Copyright (c) Microsoft Corporation.  All rights reserved.

MyComponent.winmd is a delay-signed or test-signed assembly

我发现了some对此problem的引用,但从未见过实际的错误报告或确认这是一个实际问题。

我们希望发布签名组件而不是unsigned的原因是我们希望我们的组件能够从其他强名称组件中使用。如果我们的组件未签名,则无法实现。

这个问题是否有更好的解决方法,或者我做错了什么导致签名无法按预期工作?

1 个答案:

答案 0 :(得分:0)

我最终编写了一个MSBuild目标来将它一起破解,以便在编译后立即对WinMD文件进行签名。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="SignWinMD" AfterTargets="ExportWindowsMDFile" Condition="'$(Configuration)' == 'Release'">
    <Exec Command="&quot;$(SDK40ToolsPath)\sn.exe&quot; -R &quot;$(_IntermediateWindowsMetadataPath)&quot; $(AssemblyOriginatorKeyFile)" />
  </Target>
</Project>

您可以在</project>代码

之前的某处简单地添加它,将其包含在项目中
<Import Project="SignWinMD.targets" />

执行此操作后,在Visual Studio中使用组件的“项目”页面中的Signing菜单时,将正确签署项目。请注意,您必须具有密钥设置才能使其正常工作。