TL: DR Как ссылаться на сборку только в библиотеке классов, а не на библиотеку и на вызывающий проект?Как правильно разрешать ссылки DLL через библиотеки классов без добавления ссылки на вызывающий проект
Я создаю библиотеку утилиты в C#, чтобы продвигать повторное использование кода. В этом случае, я хотел сделать что-то вещи с сервера TFS и нужно ссылаться на несколько сборок со стороны TFS вещей:
- Microsoft.TeamFoundation.Client
- Microsoft.VersionControl.Client
- Microsoft.WorkItemTracking.Client
Я включаю эти ссылки в библиотеку классов, называемую, скажем, утилитой. Затем я перехожу к обертке объектов в этих сборках в вспомогательных объектах. Ошибок нет, intellisense работает правильно и т. Д.
Когда я хочу использовать эту библиотеку классов в другом проекте внутри одного и того же решения, скажем, TestCLI, я добавляю ссылку на проект Utility, выбирая проект со вкладки ссылок на решения. Затем я могу использовать классы Utility без проблем, пока не приступлю к созданию.
Когда я построить решение, вдруг выдает ошибку, такие как:
The type 'Microsoft.TeamFoundation.VersionControl.Client.BranchObject' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.TeamFoundation.VersionControl.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
В прошлом я работал вокруг этого вопроса, добавив те же ссылки на проект вызывающего (TestCLI) в дополнение к библиотеке классов (Утилита). Я чувствую, что это побеждает одну из целей наличия библиотеки классов и что я пропустил шаг, чтобы не беспокоиться о ссылках на библиотеки в моем вызывающем проекте.
Есть ли способ разрешить эти зависимости без включения ссылок как в библиотеку классов, так и в вызывающий проект? Я неправильно структурирую свои решения? Я думаю о библиотеках классов неправильно?
Если это происходит из-за того, что ваша библиотека подвергает классы или методы из других библиотек напрямую, и поэтому требуется ссылка. Если вы полностью спрячете объекты других библиотек, он не должен ссылаться на них. – Gusman
Теперь я чувствую себя таким идиотом. Это делает гораздо больше смысла, чем его нарушение. У меня есть небольшая работа, чтобы решить эти изменения. Знаете ли вы, есть ли способ вставить эти ссылки, чтобы даже если я хочу использовать некоторые из объектов, я могу без ссылки на них? Кроме того, если вы хотите, напишите ответ, и я приму его. В противном случае я могу написать так, чтобы у него было что-то для этого. – Gilbrilthor
Ну, вы не можете разоблачить объекты вообще, но вы можете инкапсулировать их, это зависит от того, что вы подвергаете. Если это классы данных, вы можете просто создать копию этого класса в своей библиотеке, если это функции, вы можете создать для них обертку. – Gusman