Сборка NuGet вне папки lib
Я собираюсь задать пару вопросов здесь... во-первых, с NuGet можно создать пакет из нескольких DLL? Нет проекта визуальной студии, просто командной строки и нескольких предварительно скомпилированных DLL файлов.
Во-вторых, если предположить, что это возможно, почему я постоянно получаю предупреждение "Сборка за пределами папки lib"? Я пробовал все, что я могу придумать, чтобы связать сборки, чтобы добавить себя в качестве ссылок внутри пакета NuGet.
Моя файловая структура выглядит следующим образом
Root
- File1.dll
- lib
- File2.dll
- File3.dll
Когда я говорю NuGet, чтобы упаковать его с помощью .nuspec, подобного этому
<?xml version="1.0"?>
<package >
<metadata>
<id>File1.dll</id>
<version>1.0.0</version>
<authors>thisguy</authors>
<owners>thisguysmom</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>This is some library</description>
<releaseNotes>Porting to NuGet</releaseNotes>
<copyright>Copyright 2012</copyright>
<references>
<reference file="File2.dll" />
<reference file="File3.dll" />
</references>
</metadata>
</package>
Я получаю это предупреждение. Из того, что я читаю, мне не нужно даже определять ссылки node в любом из моих проектов, так как элементы папки lib должны автоматически добавляться в качестве ссылок?
Кто-нибудь знает этот беспорядок NuGet?
Ответы
Ответ 1
Любая DLL, на которую вы хотите ссылаться, должна находиться в папке lib. Предупреждение связано с тем, что файл file1.dll находится за пределами lib и будет игнорироваться во время установки пакета. (Другая специальная папка - это "контент" и "инструменты" ).
Я использовал эту структуру:
Root
- lib
- File1.dll
- File2.dll
- File3.dll
Подробнее см. http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions.
Ответ 2
Я столкнулся с этой проблемой. Nuget ожидает структуру, которая выглядит так:
root
- lib
- net40
- File1.dll
- File2.dll
- File3.dll
net40 или net20 или net45 в зависимости от вашей версии .net.
run
nuget pack yourlibrary.nuspec
чтобы упаковать его.
упакует эту оптовую опцию и поместит ее в nupkg. Сообщения об ошибках исчезнут в этой точке.
Ответ 3
С версией NuGet, текущей с этого поста (и я предполагаю, что и более поздние версии), вы можете использовать файл .csproj в тандеме с файлом .nuspec для создания пакета. То, что мы сделали, это сделать файл .nuspec(используя спецификацию nuget, а затем настроить его) и включить его в проект.
С помощью настроенного файла .nuspec мы использовали команду:
nuget pack sample.csproj -IncludeReferencedProjects
В этот момент он построил .nupkg и не выпустил проблем. Файл .nupkg появился в обычной выходной папке (в моем случае по умолчанию, bin\debug).
Ответ 4
Вы можете добавить ссылки на другую dll, добавив ниже внутренний тег в файл nuspec
<package>
<metadata>
...
</metadata>
<files>
<file src="..\ReferencedFolder\*.*" target="lib\net40\" />
</files>
</package>
Ответ 5
Alexandre ссылается на папку "lib", которая создается при создании пакета NuGet. Вы можете открыть .nupkg так же, как и любой zip файл. Там вы увидите папку lib\netXX, где XX - это версия платформы .NET, на которую вы нацеливаетесь. Поэтому, когда вы упаковываете свой файл NuGet, убедитесь, что File1.dll находится внутри папки lib.
Ответ 6
Они попадают в папку "lib", будучи включенными в вашу папку bin\debug или bin\release в .NET. Поэтому вам нужно собрать компиляцию проекта, чтобы скопировать локальную часть на внешние DLL, чтобы она включала их в папку bin при компиляции.
Ответ 7
Я использовал решение проф Von Lemongargle, и для меня это было отличное решение.
Важно:
- Включить спецификационный файл (с правой кнопкой мыши- > Включить в проект) в проекте
- Отдайте спецификацию файла SAME FILENAME вашего проекта (myproject.csproj, myproject.nuspec)
Эта работа отлично работает в Visual Studio 2012.