Сам проект .dll отсутствует в сгенерированном пакете nuget - PullRequest
0 голосов
/ 15 марта 2019

У меня c # .net основной проект. Имя проекта Master и имеет зависимости от внешнего пакета NuGet как "SpecFlow.CustomPlugin". Мастер-проект имеет два класса: Shape.cs и Factory.cs .

Когда я генерирую пакет NuGet в проекте Master, чтобы реализация классов Shape.cs и Factory.cs могла быть полезна в качестве библиотеки для других проектов. После генерации пакета NuGet мастер-проекта я вижу только содержимое «SpecFlow.CustomPlugin» с его собственными зависимыми dll-файлами, но не могу увидеть dll мастер-проекта во вновь созданном пакете NuGet.

Вновь созданный пакет NuGet включен в другой проект, скажем, Consumer. Потребитель хочет использовать метод Shape.cs и метод Factory.cs, но он недоступен.

Мастер-проект Зависимости выглядит так: enter image description here

1 Ответ

0 голосов
/ 15 марта 2019

Сначала убедитесь, что Shape и Factory общедоступны. Если вы не укажете их видимость, по умолчанию они являются закрытыми, что означает, что они не могут быть использованы непосредственно другими проектами, ни как ссылки на пакеты, ни как ссылки на проекты.

Когда вы упаковываете master в пакет NuGet, он создает файл по умолчанию bin\Debug\master.1.0.0.nupkg. Предполагая, что master нацелен на .NET Standard 2.0, dll мастера сохраняется как lib\netstandard20\master.dll в nupkg. Вам нужно добавить / отправить этот nupkg в ленту новостей (это может быть каталог на вашем компьютере или в сети, nuget.org или вы можете разместить свой собственный канал ). Вашему comsumer проекту потребуется nuget.config, который добавляет правильный канал NuGet в качестве источника, затем вы добавляете ссылку на пакет в основной пакет. После восстановления (что Visual Studio делает автоматически, если вы добавили пакет с пользовательским интерфейсом), вы можете использовать любой из общедоступных классов мастера.

Вот команды, которые вы можете запустить в командной строке для настройки двух проектов: один - пакет, а другой - его использование. Если вы используете .NET Core в Visual Studio, он, должно быть, уже скачал .NET Core SDK, который помещает dotnet cli на ваш путь. Вам также необходимо скачать nuget.exe из https://www.nuget.org/downloads/.

dotnet new nugetconfig
nuget source -configfile nuget.config add -name local -source feed

# create an isolated nuget environment, because I don't like to populate
# my global packages folder with test packages
nuget config -configfile nuget.config -set globalPackagesFolder=gpf

# create a library, pack it, and add the nupkg to our local feed
dotnet new classlib -n MyLib
dotnet pack MyLib\MyLib.csproj -o nupkgs\
nuget add MyLib\bin\Debug\MyLib.1.0.0.nupkg -s local

# create console app and reference MyLib
dotnet new console -n MyApp
dotnet add MyApp\MyApp.csproj package MyLib --version 1.0.0

#if you want to open these projects in Visual Studio
dotnet new sln -n sample
dotnet sln add MyLib\MyLib.csproj
dotnet sln add MyApp\MyApp.csproj
start sample.sln

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

...