2013-06-26 3 views
1

Nous expédions un composant Windows Runtime signé. À l'heure actuelle, nous signons le winmd comme ceci:Comment signer correctement un fichier winmd?

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

Cela nécessite un chemin hardcoded au pire (en supposant que vous utilisez 64 bits pour construire et avoir exactement v8.0A) .. ou au mieux nécessite une variable d'environnement être configuré avant de pouvoir faire une build

Dans Visual Studio, il y a également une section sur la page Projet du composant Windows Runtime appelée "Signing". Si je coche la case de signature si et choisissez un fichier de clés approprié, il va semble bien fonctionner, mais ne sera pas correctement signé:

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 

J'ai trouvé some références à ce problem, mais jamais vu un rapport de bogue ou un accusé de réception indiquant qu'il s'agit d'un problème réel. La raison pour laquelle nous souhaitons expédier un composant signé, par opposition à non signé, est que nous souhaitons que notre composant puisse être utilisé à partir d'autres composants portant un nom fort. Si notre composant n'était pas signé, cela ne serait pas possible.

Y a-t-il une meilleure solution de contournement pour ce problème, ou est-ce que je fais quelque chose de mal qui empêche la signature de fonctionner comme prévu?

+0

Larry Osterman était assez explicite à ce sujet, les fichiers .winmd ne peuvent pas être signés. Il n'y a pas non plus de raison de le faire. Pourquoi insistez-vous pour essayer quand même? –

+0

@HansPassant il n'a pas dit qu'ils ne pouvaient pas être signés parce qu'ils peuvent, ils passent la certification et leurs restrictions seront également maintenues (au moins avec le mode test ou autre). Même si vous n'aviez pas l'intention de signer alors, pourquoi laisser le menu dans Visual Studio alors? – Earlz

Répondre

0

J'ai fini par écrire une cible MSBuild pour la hacher ensemble afin qu'elle signe le fichier WinMD juste après la compilation.

<?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> 

-vous inclure dans votre projet par un simple ajout de ce quelque part avant la balise </project>

<Import Project="SignWinMD.targets" /> 

Après avoir fait cela, votre projet sera dûment signé lorsque vous utilisez le menu Signing de la page du projet de composant dans Visual Studio. Notez que vous devez disposer d'une configuration de clé pour que cela fonctionne.

Questions connexes