我们正在发布一个已签名的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 Runtime组件的Project页面上还有一个称为"Signing“的部分。但是,如果我选中签名框并选择适当的密钥文件,它将看起来工作正常,但不会被正确签名:
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我找到了对此problem的some引用,但从未见过实际的错误报告或确认这是一个实际的问题。
我们希望发布已签名组件而不是未签名组件的原因是,我们希望我们的组件能够在其他强名称组件中使用。如果我们的组件是未签名的,这是不可能的。
这个问题有没有更好的解决方法,或者我做错了什么导致签名不能像我期望的那样工作?
发布于 2013-06-27 06:07:16
我最终编写了一个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中组件的project页面中的Signing菜单时,您的项目将得到正确的签名。注意:您必须有一个密钥设置才能正常工作。
https://stackoverflow.com/questions/17329451
复制相似问题