2010-01-14 4 views
4

Это, наверное, очень просто, но я в тупике (и я ноб с C#). У меня есть 3 сборки, которые ссылаются друг на друга (например, регистрируются для уведомления о методе делегата или вызывают открытый метод), все из которых компилируются до тех пор, пока я не попытаюсь подписать их с сильным именем. Тогда я не могу скомпилировать ни один из них, так как у двух других нет сильного имени. Что мне не хватает? Я создал сильный файл имен для всех трех, но не могу включить snk и скомпилировать их.Назовите три сборки, которые ссылаются друг на друга

+0

Любая циклическая зависимость? – affan

+0

Нет, о чем я знаю. – Shawn

ответ

4

Если вы создали один файл snk, который хотите использовать на всех трех из них, выберите: Добавить существующий элемент из контекстного меню в проектах.

Просмотрите файл snk, а затем выберите «Добавить в качестве ссылки», нажав на стрелку рядом с кнопкой «Добавить».

Затем в свойствах проекта убедитесь, что на вкладке «Подпись» установите флажок «Подписать сборку», а затем выберите ключевой файл, который вы только что добавили в свой проект.

Это должно сделать трюк.

+0

+1. Поскольку вы, похоже, знаете этот материал, и мне любопытно, есть ли недостатки в использовании одного и того же ключа для всех из них? – Skurmedel

+2

Не знаю, о чем я сейчас знаю. На самом деле загрузки связанных сборок Microsoft имеют тот же самый PublicKeyToken (вы можете проверить это в своем глобальном кэше сборки), указав, что они были подписаны с тем же ключевым файлом, что и iirc. – Anton

+0

Это полезно знать, немного утомительно, если у вас 5 сборок, и вы создаете 5 ключей напрасно :) – Skurmedel

2

Узел с сильно именованием может ссылаться только на другие узлы с жесткими именами.

Когда вы ссылаетесь строгим именем сборки, вы ожидаете получить определенные преимущества, такие как управление версиями и именовании защиты. Если сильное названием сборки затем ссылается на сборке с простым именем, которое не этих преимущества, вы теряете преимущества, которые вы бы получить от использования строгого имени сборки и вернуться к DLL конфликтов. Поэтому сильные имена могут ссылаться только на другие узлы с сильными именами.

Цитируется по MSDN.