Windows runtime 如何正确签署winmd文件?

Windows runtime 如何正确签署winmd文件?,windows-runtime,windows-store-apps,signing,strongname,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)。。或者最多需要先设置一个环境变量,然后才能进行生成 在VisualStudio中,Windows运行时

我们正在提供一个签名的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)。。或者最多需要先设置一个环境变量,然后才能进行生成

在VisualStudio中,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
我已经找到了这方面的参考资料,但从未见过实际的错误报告或承认这是一个实际问题

我们希望发布有符号组件而不是无符号组件的原因是,我们希望我们的组件能够从其他强命名组件中使用。如果我们的组件没有签名,这是不可能的


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

我最终编写了一个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>

您只需在
标记之前的某个位置添加它,即可将其包含在项目中

<Import Project="SignWinMD.targets" />


完成此操作后,在Visual Studio中使用组件的项目页面中的
签名
菜单时,项目将正确签名。注意:您必须具有密钥设置才能工作

Larry Osterman对此非常明确,.winmd文件无法签名。这也没有任何意义。你为什么坚持要尝试呢?@HansPassant他并没有说他们不能被签署,因为他们可以,他们通过了认证,他们的限制也将得到维护(至少在测试模式或任何情况下)。即使您当时不打算签名,为什么要将菜单留在VisualStudio中呢?