Создание управляемой (/ clr) сборки C ++ со строгим именем - PullRequest
9 голосов
/ 25 февраля 2011

У меня есть управляемая сборка C ++ с использованием ключа /clr, который я пытаюсь подписать согласно этому вопросу со следующим шагом после сборки:

sn -Ra "$(TargetPath)" MyKey.snk

Однако это приводит к следующей ошибке:

C:\Path\Assembly.dll does not represent a strongly named assembly

Что не так?

Ответы [ 3 ]

11 голосов
/ 25 февраля 2011

Вы пометили сборку для отсрочки подписания в AssemblyInfo.cpp?

[assembly:AssemblyKeyFileAttribute("MyKey.snk")];
[assembly:AssemblyDelaySignAttribute(true)];
7 голосов
/ 10 марта 2011

Я понял это в конце - согласно связанному вопросу, я не могу просто установить опцию Linker/Advanced/KeyFile и ожидать, что она будет работать - мне нужно использовать sn.exe, чтобы подписать сборку, однако я также все еще нужно установить опцию Linker/Advanced/KeyFile.

Короче говоря, чтобы подписать сборку / clr, вам нужно:

  1. Указать файл ключа в Linker/Advanced/KeyFileстраница свойств
  2. Используйте sn.exe, чтобы подписать сборку как шаг после сборки

(я считаю, что использование [assembly:AssemblyKeyFileAttribute("MyKey.snk")] эквивалентно установке ключевого файла в свойствах проектадиалог).

6 голосов
/ 04 мая 2012

Ответ с отметкой помог достичь окончательного решения (поэтому он получает +1 от меня).

Однако пришлось потратить несколько разочаровывающих минут, чтобы понять, как создать AssemblyInfo.cpp в VS2010.

Ниже приведен «более» полный ответ на проблему.

#include "stdafx.h"

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;

[assembly:AssemblyKeyFileAttribute("YourAssembly.snk")];
[assembly:AssemblyDelaySignAttribute(true)];

Затем в качестве шага после сборки выполните sn -Ra YourAssembly.dll YourAssembly.snk

...