Използвам VS2012. Имам C++ Native Library и C++/CLI проект, който създадох, за да обвия C++ Native библиотеката. Изграждам проектите за x64 бита.
Нямам много опит с C++ или C++/CLI, това е първият проект, който се опитвам да подпиша.
Как подписах моя C++/CLI проект:
- Поставих силното си име в същата папка, където се намира C++/CLI, и след това отидох на: Щракнете с десния бутон върху проекта -> Свойства на конфигурацията -> Линкер -> Разширени -> Ключов файл.
- Написах името на моя файл в атрибута Key File: StrongNameKey.snk.
Създава се без грешки и мога да пусна тестовете. Имам и друго решение, което използва получената dll и то се изгражда добре и тестът преминава. Но това решение не използва подписани сглобки.
Грешките, които получавам:
Имам C# решение с подписани всички негови сборки.
Първоначално използвах моя C++/CLI dll в това решение, без да го подписвам, и най-вече работеше. Но получавах грешка, подобна на това, когато се опитвате да използвате един от класовете Wrapper в ComboBox в WPF.
Тази публикация ме накара да осъзная, че съм забравил да подпиша C++/CLI сборката.
И така след това ги подписах, както описах по-горе, но когато се опитах да използвам dll в моето C# решение, получавах много грешки. Нито едно от тях не изглеждаше свързано с моя dll, освен 2 предупреждения.
Първо предупреждение
Предупреждение 18 Имаше несъответствие между архитектурата на процесора на изграждания проект "MSIL" и архитектурата на процесора на препратката "MyNamespace.MyCppCLI", "AMD64". Това несъответствие може да причини грешки по време на изпълнение. Моля, помислете за промяна на целевата процесорна архитектура на вашия проект чрез Configuration Manager, така че да подравните процесорните архитектури между вашия проект и препратките, или вземете зависимост от препратки с процесорна архитектура, която съответства на целевата процесорна архитектура на вашия проект. MyTestApp
Нямам нищо зададено като AMD, просто съм го конфигурирал на x64. Моят C# проект е конфигуриран за AnyCPU.
Второ предупреждение: Грешката гласеше, че има 2 различни местоположения на подписа.
Използвах едно и също "име" както за C#, така и за C++/CLI подписа (файловете бяха копия). Промених името на подписа на C++/CLI и създадох проекта отново. И сега проектът C# се изгражда, но все още не мога да използвам класа в ComboBox и дизайнерът извежда грешката на другия post, освен че публичният токен не е нулев.
Не знам какво правя грешно.
Кои са правилните стъпки за подписване на C++/CLI проект? Къде трябва да поставя файла за подпис?