如何在MSbuild中添加预建活动来验证签名过程?

时间:2012-01-04 13:48:40

标签: msbuild wix wix3.5 strongname msbuild-4.0

我们正在使用Msbuild来构建我们的Wix项目。由于各种问题,wix中指定的程序集很少被延迟签名。当它安装在GAC中时失败了。

有没有办法在wix中验证强名称签名验证作为预建活动?

我正在使用sn -vf "assembly"进行强名称验证。

我想仅对将在wix msi中包装的dll进行强名称验证(换句话说,在wxs文件中指定的程序集)

如何做到msbuild?

1 个答案:

答案 0 :(得分:2)

  • 快速解决方案是添加一个调用sn.exe的 BeforeBuild 事件:

打开您的.wixproj文件并添加:

<Target Name="BeforeBuild">
<ItemGroup>
    <AssemblyToSign Include="C:\SignedAssembly1.dll"/>
    <AssemblyToSign Include="C:\SignedAssembly2.dll"/>      
</ItemGroup>
     <Exec Command="sn -q -vf %(AssemblyToSign.Identity)" />
</Target>

一旦程序集验证失败,这将使您的构建失败。


  • 另一个解决方案是使用MSBuild Extension Pack的 Signing 类:

再一次,这将使您的构建失败验证失败:

<Target Name="BeforeBuild">
<ItemGroup>
        <AssemblyToSign Include="C:\SignedAssembly1.dll"/>
        <AssemblyToSign Include="C:\SignedAssembly2.dll"/>      
</ItemGroup>
 <MSBuild.ExtensionPack.Framework.Signing 
         TaskAction="Sign" 
         ToolPath="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin" 
         KeyFile="D:\key.snk" 
         Assemblies="@(AssemblyToSign)" />
</Target>

要使用它,您必须添加对Extension Pack程序集的引用:

<PropertyGroup>
    <ExtensionTasksPath Condition="Exists('$(MSBuildProjectDirectory)\..\..\Common')">$(MSBuildProjectDirectory)\..\..\Common</ExtensionTasksPath>
</PropertyGroup>
<UsingTask AssemblyFile="$(ExtensionTasksPath)\MSBuild.ExtensionPack.dll" TaskName="MSBuild.ExtensionPack.Framework.Signing"/>