.net — добавлена ​​сборка со строгим именем, но она ищет неподписанную сборку

Итак, у меня есть два проекта... Один - большая библиотека классов, а другой - большой проект симулятора.

Первоначально во время тестирования сборки не имели строгих имен, но теперь, когда мне нужна видимость COM, мне нужно дать им строгие имена (мне нужно это быстро, и проще сделать их COM-видимыми, чем иметь дело с CLI).

Я создал .snk и добавил его в свойства каждого из проектов, библиотека классов прекрасно компилируется и отлично выводит .dll. Я добавил эту .dll в качестве ссылки в проект симулятора, но теперь проект симулятора дает мне следующую ошибку:

Тип DynamicsControl определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку "DynamicsControl, Version=0.4.3.0, Culture=neutral, PublicKeyToken=null"

Тип DynamicsControl существует в библиотеке классов (я проверил), но он утверждает, что я загружаю неправильную сборку. Я считаю, что причиной проблемы является PublicKeyToken=null (поскольку моя сборка будет иметь открытый ключ).

Когда я делаю sn -Tp DynamicsControl.dll (тот, который находится в месте, на которое я ссылаюсь), он выводит закрытый и открытый ключ, поэтому я знаю, что у него правильная подпись.

Какой шаг я пропустил? Нужно ли добавлять сборку в GAC? Должен ли я вручную добавлять открытый ключ?


person Gauss    schedule 10.12.2013    source источник


Ответы (1)


Да, вам нужно указать publicKeyToken для сборки со строгим именем, иначе она будет искать неподписанную версию сборки. Вы можете узнать токен открытого ключа либо добавив сборку в GAC (и вы увидите ее там), либо выполнив шаги, указанные в этом ссылка

Если вы хотите узнать больше о строгом имени и аде dll, вы можете перейти к этому URL .

Строгое имя предотвращает ад dll, что означает, что у вас может быть несколько версий одной и той же сборки.

На ваш другой вопрос вам не нужно добавлять сборку в GAC, но CLR сначала будет искать сборку в GAC, а затем в других местах. Кроме того, вам не нужно добавлять ключ вручную. Если вы удалите ссылку и добавите ее обратно, используя подписанную сборку, она должна автоматически получить ключ.

person Adarsh Shah    schedule 10.12.2013
comment
Я выполнил эти шаги несколько раз ... Когда я добавляю неподписанную DLL, я все еще получаю сообщение об ошибке, что она не определена в сборке, что мне нужно добавить ту же сборку с нулевым открытым ключом. Могу ли я в любом случае стереть кеш проекта или что-то в этом роде? Я сделал Build -> Clean несколько раз, но я не могу не чувствовать, что есть ссылка на файл, которая не очищается, потому что это просто подписанная версия того же файла... - person Gauss; 17.12.2013