1

我有一个用 C++ 托管和非托管编写的混合组件。为了签署这个程序集,我使用延迟签名和以下构建后事件:

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

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

如果我将这个项目转移到另一台 PC(VS2010 德语,Win7 32 位)上,此构建步骤将失败并显示错误消息。

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 没有强名称。我不明白,因为同一个项目在我的第一台机器上构建没有问题。

4

1 回答 1

1

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

VS2010 不带 SP1 存储在项目文件中:

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

带有 SP1 商店的 VS2010:

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

所以带有 SP1 的 VS2010 忽略了在没有 SP1 的情况下设置的 /DELAYSIGN 选项。所以 sn.exe 无法签署程序集。

在我原来的 PC 上安装 SP1 并再次设置延迟符号选项解决了这个问题。

于 2011-09-30T08:02:56.763 回答