签署混合代码程序集

时间:2011-09-29 09:43:03

标签: .net unmanaged managed-c++ sign sn.exe

我有一个用C ++编写的托管和非托管的混合组件。要对此程序集进行签名,我使用延迟签名并使用以下Post-build事件:

sn -R $(TargetPath) $(ProjectDir)Fischer.snk

这在我自己的电脑上没有任何问题(VS2010英文,Windows XP 32Bit)。

如果我在另一台PC(VS2010 german,Win7 32Bit)上传输此项目,则此构建步骤将出现错误消息。

Fehler   1          error MSB3073: Der Befehl "sn -R C:\Daten\APRGX\DotNet\VisualData\Master3DControlClasses\Project\Debug\Fischer.APRGX.MathAlg.Native.dll c:\Daten\APRGX\DotNet\MathAlg\Native\Fischer.snk :VCEnd" wurde mit dem Code 1 beendet.         C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets            113       6          Fischer.APRGX.MathAlg.Native

可能是什么原因?

编辑: 在命令提示符下启动该工具,它说:

"C:\Daten\APRGX\DotNet\VisualData\Master3DControlClasses\Project\Debug\Fischer.APRGX.MathAlg.Native.dll" stellt keine Assembly mit einem starken Namen dar.

它说dll没有强名称。我不明白,因为同一个项目在我的第一台机器上没有问题。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案: 问题是在我原来的PC上我使用VS2010而在第二台PC上我使用的是VS2010 SP1。

VS2010没有SP1存储在项目文件中:

    <Link>
  <GenerateDebugInformation>true</GenerateDebugInformation>
  <AdditionalDependencies>
  </AdditionalDependencies>
  <KeyFile>$(ProjectDir)Fischer.snk</KeyFile>
  <DelaySign>true</DelaySign>
</Link>

VS2010 SP1存储:

    <LinkKeyFile>$(ProjectDir)Fischer.snk</LinkKeyFile>
<LinkDelaySign>true</LinkDelaySign>

所以带有SP1的VS2010 igonore没有SP1设置的/ DELAYSIGN选项。所以sn.exe无法签署程序集。

在原始PC上安装SP1并再次设置延迟标志选项解决了这个问题。