MiniGoel2017 Ответов: 1

Нужно ли устанавливать пакет NuGet в стандартную библиотеку .NET или исполняемый проект, или и то, и другое?


Я использую Visual Studio 2017 и создаю стандартную библиотеку .Net. В этой библиотеке я добавляю ссылку на службу WCF с помощью опции WCF Connected Service. Поскольку этот проект является библиотекой классов, я добавляю его ссылку в консольное приложение (исполняемый проект).

В моем проекте .net standard я вызываю метод из библиотеки служб WCF. Когда я запускаю проект, я получаю ошибку -
System.IO.FileNotFoundException: "не удалось загрузить файл или сборку" системы.Сервис-модель.Примитивы, версия=4.1.1.0, культура=нейтральная, PublicKeyToken=b03f5f7f11d50a3a' или одна из его зависимостей. Система не может найти указанный файл.'

Итак,в консоли диспетчера пакетов я устанавливаю систему.Сервис-модель.Пакет примитивов для проекта стандартной библиотеки .net, но я все равно получаю ту же ошибку. Если я также установлю тот же NuGet для исполняемого проекта, то ошибка исчезнет.

Мой вопрос заключается в том, должен ли я устанавливать все пакеты NuGet два раза (один раз для библиотеки классов, а затем один раз для исполняемого проекта)?

Что я уже пробовал:

Я попытался добавить ссылку на систему.Сервисная модель и система.Сервис-модель.Примитивы dll в исполняемом проекте

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Да, вы должны "установить пакет" для каждого проекта, который будет его использовать, но вы устанавливаете исполняемые файлы только один раз в решении. Каждый проект будет иметь ссылки, добавленные к нему, где они будут указывать на общую папку для двоичных файлов для этой библиотеки.

Когда вы строите проект, то обязательно .DLL-файлы окажутся в папке bin для вашей сборки, \bin\Debug, \bin\Release. Эти файлы должны идти вместе с каждым из ваших развертываемых проектов.


MiniGoel2017

о, но мой исполняемый проект не использует NuGet. В основном он вызывает функциональность проекта библиотеки классов .net standard, которая использует функциональность NuGet. Нужно ли мне по-прежнему устанавливать NuGet для исполняемого проекта?

Dave Kreskowiak

Ни один проект "не использует Nuget". Вы не устанавливаете Nuget.

Nuget - это инструмент, используемый Visual Studio для установки библиотечных пакетов в ваши проекты.

MiniGoel2017

Извините за сбивающий с толку термин, который я использовал. Я имел в виду, что мой исполняемый проект не использует эти библиотечные пакеты. Его в основном звоню .объем стандартный проект библиотеки классов, которая с помощью этих установленных функций проекта библиотеки. Нужно ли мне по-прежнему устанавливать эти библиотечные проекты через nuget для исполняемого проекта?

Dave Kreskowiak

Проект библиотеки классов, если он обрабатывает все коммуникации и управление объектами с вызываемой службой WCF, эти пакеты должны быть необходимы только в проекте библиотеки классов.

Если ваш .EXE также возится с объектами, которые вы передаете туда и обратно с помощью сервиса, тогда ему тоже понадобятся пакеты.

Если ваша библиотека классов И.EXE создают и передают бизнес-объекты между собой, пакеты не нужны. Ваша библиотека классов должна была бы создавать и переводить между этими бизнес-объектами и объектами, передаваемыми туда и обратно службе.

MiniGoel2017

Таким образом, моя библиотека классов обрабатывает все операции, а исполняемый проект вызывает только метод библиотеки классов. Так что, по вашему мнению,он не должен спрашивать в исполняемом проекте, но это так. Пожалуйста, проверьте это для получения дополнительной информации.
https://social.msdn.microsoft.com/Forums/vstudio/en-US/954059c8-adb6-4fe2-939a-e60da1587545/do-i-need-to-install-nuget-package-on-net-standard-library-or-executable-project-or-both?forum=wcf