我们正在发送已签名的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的原因是我们希望我们的组件能够从其他强名称组件中使用。如果我们的组件未签名,则无法实现。
这个问题是否有更好的解决方法,或者我做错了什么导致签名无法按预期工作?
答案 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=""$(SDK40ToolsPath)\sn.exe" -R "$(_IntermediateWindowsMetadataPath)" $(AssemblyOriginatorKeyFile)" />
</Target>
</Project>
您可以在</project>
代码
<Import Project="SignWinMD.targets" />
执行此操作后,在Visual Studio中使用组件的“项目”页面中的Signing
菜单时,将正确签署项目。请注意,您必须具有密钥设置才能使其正常工作。