MSBuild не копирует ссылки (файлы DLL) при использовании зависимостей проекта в решении

Используя интерфейсы ключевой фактор в создании Вашего кода, легко тестируемого в дополнение к удалению ненужных связей между Вашими классами. Путем создания интерфейса, который определяет операции на классе, Вы позволяете классы, которые хотят использовать ту функциональность способность использовать его без в зависимости от Вашего класса с реализацией непосредственно. Если позже Вы решаете изменить и использовать различную реализацию, Вы должны только изменить часть кода, где реализация инстанцируют. Остальная часть кода не должна изменяться, потому что это зависит от интерфейса, не класса с реализацией.

Это очень полезно в создании модульных тестов. В классе под тестом у Вас есть он, зависят от интерфейса и вводят экземпляр интерфейса в класс (или фабрика, которая позволяет ему создавать экземпляры интерфейса по мере необходимости) через конструктора или метод set свойства. Класс использует обеспеченный (или созданный) интерфейс в его методах. Когда Вы идете для записи тестов, можно дразнить или фальсифицировать интерфейс и обеспечить интерфейс, который отвечает данными, настроенными в модульном тесте. Можно сделать это, потому что класс под тестом имеет дело только с интерфейсом, не конкретной реализацией. Любой класс, реализовывая интерфейс, включая Ваш ложный или поддельный класс, сделает.

РЕДАКТИРОВАНИЕ: Ниже ссылка на статью, где Erich Gamma обсуждает свою кавычку, "Программа к интерфейсу, не реализация".

http://www.artima.com/lejava/articles/designprinciples.html

271
задан Peter Mortensen 20 January 2017 в 07:54
поделиться

2 ответа

Взгляните на:

Эта ветка форума MSBuild, которую я начал

Вы найдете мое временное решение / обходной путь там!

(MyBaseProject нуждается в некотором коде, который ссылается на некоторые классы (что угодно) из elmah.dll для elmah.dll, копируемого в корзину MyWebProject1!)

14
ответ дан 23 November 2019 в 02:16
поделиться

Если вы не используете сборку непосредственно в коде, тогда Visual Studio, пытаясь быть полезным, обнаруживает, что он не используется, и не включает его в вывод. Я не уверен, почему вы наблюдаете разное поведение между Visual Studio и MSBuild. Вы можете попробовать настроить вывод сборки на диагностику для обоих и сравнить результаты, чтобы увидеть, где они расходятся.

Что касается вашей ссылки на elmah.dll, если вы не ссылаетесь на нее непосредственно в коде, вы можете добавить ее как элемент в свой проект и установите Действие сборки на Контент , а для Копировать в выходной каталог - Всегда .

38
ответ дан 23 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: