Подписание смешанной сборки кода
У меня смешанный ассамблийский язык, написанный на C++, управляемый и неуправляемый. Чтобы подписать эту сборку, я использую отложенную подпись со следующим событием после сборки:
sn -R $(TargetPath) $(ProjectDir)Fischer.snk
Это работает без каких-либо проблем на моем собственном ПК (VS2010 англ., Windows XP 32Bit).
Если я перенесу этот проект на другой компьютер (VS2010 немецкий, 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 ответ
Я нашел решение: проблема была в том, что на моем исходном ПК я использую VS2010, а на втором ПК я использую 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>
Поэтому VS2010 с SP1 игонорирует параметр /DELAYSIGN, который был установлен без SP1. И поэтому sn.exe не смог подписать сборку.
Установка SP1 на моем исходном компьютере и установка опции знака задержки снова решили проблему.