1

私はC++マネージとアンマネージで書かれた混合アセンブリを持っています。このアセンブリに署名するには、次のビルド後イベントで遅延署名を使用します。

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

これは、自分のPC(VS2010英語、Windows XP 32ビット)では問題なく動作します。

このプロジェクトを別の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を使用しており、2番目のPCではVS2010SP1を使用していることでした。

SP1なしのVS2010はプロジェクトファイルに保存されます:

    <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 に答える