Запутанное использование DLL в WinForms

У меня есть проект и решение WinForms, а некоторые проекты библиотеки классов также добавлены к тому же решению.

Проект WinForms использует код в библиотеках классов. Я пользуюсь этим приложением около года, и оно всегда работало хорошо.

Однако сегодня я добавил некоторые функции в библиотеку классов, но эти изменения не отображаются в работающем приложении. Я также попытался добавить новый общедоступный метод в один из классов, но этот метод не отображается в Intellisense для приложения.

Это должно быть очень просто решить, но с тем, как WinForms автоматически копирует библиотеки DLL за кулисами, я понятия не имею, в чем проблема. Все, на что я смотрю, кажется мне правильным. Код продолжает работать, как будто он использует старую версию DLL. Но DLL в каталоге Bin моего приложения WinForms имеет сегодняшнюю дату.

Может ли кто-нибудь дать рекомендацию о том, где я должен искать решение этой проблемы?


person Jonathan Wood    schedule 20.04.2011    source источник


Ответы (3)


В соответствии с ответом Майкла вы можете обнаружить, что ссылка на сборку на самом деле не ссылка на проект, а на конкретный путь, который не является путем, который вы скомпилировали (например, bin\Release).

Кроме того, это может показаться тривиальным, но дважды проверьте, действительно ли Свойства конфигурации вашего решения создают проект, когда вы используете функцию сборки! Я отключил проекты от сборки только для того, чтобы забыть, что я это сделал, а потом я был озадачен, когда их изменения не были в моем приложении!

person Reddog    schedule 20.04.2011
comment
Спасибо, но я считаю, что весь этот процесс плохо спроектирован. Как правильно установить ссылку? Ссылаться ли на проект или скомпилированную DLL? И меняется ли ответ для сборок Debug и Release? - person Jonathan Wood; 20.04.2011
comment
Если у вас есть код как часть вашего решения, вам следует использовать ссылку на проект, так как это гарантирует отсутствие проблем между типами сборки. Хотя с дополнительным недостатком, что это может увеличить время компиляции. Положительным моментом является то, что ваши зависимости будут автоматически перестроены, если какая-либо из их зависимостей изменилась. - person Reddog; 20.04.2011

Я бы зашел в свойства проекта, удалил ссылку, снова добавил ее, чтобы убедиться, что ваша dll исходит из того места, которое вы считаете. Очистить и восстановить проект

person Michael    schedule 20.04.2011
comment
Спасибо, но я считаю, что весь этот процесс плохо спроектирован. Как правильно установить ссылку? Ссылаться ли на проект или скомпилированную DLL? И меняется ли ответ для сборок Debug и Release? - person Jonathan Wood; 20.04.2011
comment
Если вы активно изменяете включенный проект, добавьте его в качестве ссылки на проект. - person Michael; 20.04.2011

Вы разместили какие-либо библиотеки классов в GAC?

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

person Joe    schedule 20.04.2011
comment
Я совершенно уверен, что нет. Но, опять же, весь этот макет, кажется, был тщательно разработан как черный ящик, который является полной загадкой для случайного наблюдателя. - person Jonathan Wood; 20.04.2011