如何在MSbuild中添加预生成活动以验证签名过程?

如何在MSbuild中添加预生成活动以验证签名过程?,msbuild,wix,wix3.5,strongname,msbuild-4.0,Msbuild,Wix,Wix3.5,Strongname,Msbuild 4.0,我们正在使用Msbuild构建我们的Wix项目。由于各种问题,wix中指定的程序集有几次只是延迟签名。当它安装在GAC中时,它失败了 在wix中是否有任何方法将强名称签名验证作为预构建活动进行验证 我正在使用sn-vf“assembly”进行强名称验证 我只想对将打包在wix msi中的DLL(换句话说,wxs文件中指定的程序集)执行强名称验证 如何进行msbuild? 快速解决方案是添加一个调用sn.exe的BeforeBuild事件: 打开.wixproj文件并添加: <Target

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

在wix中是否有任何方法将强名称签名验证作为预构建活动进行验证

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

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

如何进行msbuild?

  • 快速解决方案是添加一个调用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>

等级:

再次,这将使您的构建在验证失败的基础上失败:

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

要使用它,必须添加对扩展包部件的引用:

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

$(MSBuildProjectDirectory)\..\..\Common

感谢buddy提供的宝贵信息。但通常在构建中,人们不会直接更改项目文件。他们将有单独的脚本,其中他们将提到wixproj的列表。为项目构建的wixproj数量可能很大,编辑每个文件并不实际。我提供了一个可能的解决方案。当然,您可以将BeforeBuild部分带到主构建脚本中。谢谢,伙计。我会尝试,当我完成,你们可以添加它作为答案的一部分。一旦我测试了它,我将接受它作为应答器,在这种情况下,我需要指定每个dll。Wxs文件将包含要作为msi一部分的DLL列表。这需要通过构建脚本获得,并进行验证。您需要解析wxs,查找
文件
元素,并记录所有
值。您可以使用PowerShell。