我刚刚实施了一个新的构建脚本文件,以便在项目之间共享代码签名详细信息,并允许我们根据我们的主证书是否可用轻松切换。这是我们的主要应用项目以及两个WiX项目(msi和exe)。
似乎WiX会记住上一次构建中的设置 - 例如,如果我在正确的位置使用cert.sign
进行构建,然后将其删除并再次构建,则会重新调用从cert.sign
加载的设置第一次构建而不是按预期使用test.sign
。这不是常规.csproj
文件中的问题。
我设置的.sign
文件(每个证书一个):
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Certificate>test.pfx</Certificate>
<FilePath>$(SolutionDir)</FilePath>
<Pwd>cert_pwd</Pwd>
<TimeStamp>/tr http://timestamp.server.com</TimeStamp>
<AppName>My App</AppName>
<Url>www.example.com</Url>
</PropertyGroup>
</Project>
主.csproj
文件(可行):
...
<Import Project="$(SolutionDir)..\..\.cert\cert.sign" Condition="Exists('$(SolutionDir)..\..\.cert\cert.sign')"/>
<Import Project="$(SolutionDir)\test.sign" Condition="!Exists('$(SolutionDir)..\..\.cert\cert.sign')"/>
<PropertyGroup>
<PostBuildEvent>signtool sign /f $(FilePath)$(Certificate) /p $(Pwd) $(TimeStamp) /d $(AppName) /du $(Url) $(TargetPath)</PostBuildEvent>
</PropertyGroup>
...
其中一个.wixproj
个文件(这不起作用):
...
<Import Project="$(SolutionDir)..\..\.cert\cert.sign" Condition="Exists('$(SolutionDir)..\..\.cert\cert.sign')"/>
<Import Project="$(SolutionDir)\test.sign" Condition="!Exists('$(SolutionDir)..\..\.cert\cert.sign')"/>
<Target Name="SignMsi">
<Exec Command="signtool sign /f $(FilePath)$(Certificate) /p $(Pwd) $(TimeStamp) /d $(AppName) /du $(Url) @(SignMsi)" />
</Target>
...
有关如何解决此问题的任何想法?这可能是SignMsi
和SignExe
目标中的问题吗?我在Visual Studio 2015 u2,WiX v3.10.2.2516