1

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

有什么方法可以将强名称签名验证作为 wix 中的预构建活动进行验证?

sn -vf "assembly"用来做强名称验证。

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

怎么做呢?

4

1 回答 1

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"/>
于 2012-01-09T21:34:53.623 回答