2012-08-07 19 views
36

Ich werde hier ein paar Fragen austesten ... Erstens, mit NuGet ist es möglich, ein Paket aus ein paar DLLs zu erstellen? Es gibt kein visuelles Studio-Projekt, nur die Befehlszeile und ein paar vorkompilierte DLL-Dateien.NuGet Assembly outside lib Ordner

Zweitens, unter der Annahme, dass das möglich ist, warum bekomme ich ständig die Warnung "Assembly außerhalb des lib-Ordners"? Ich habe alles versucht, was ich mir vorstellen kann, um Assemblys als Referenzen innerhalb des NuGet-Pakets hinzuzufügen.

Meine sieht Dateistruktur wie diese

Root 
    - File1.dll 
    - lib 
    - File2.dll 
    - File3.dll 

Als ich NuGet sagen, es zu packen einen .nuspec wie diese mit

<?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> 

ich diese Warnung erhalten. Von dem was ich lese, sollte ich nicht einmal den Referenzknoten in irgendeinem meiner Projekte definieren müssen, da die lib Ordnereinträge automatisch als Referenzen hinzugefügt werden sollten?

Kennt jemand dieses NuGet Chaos?

Antwort

9

Jede DLL, auf die verwiesen werden soll, sollte sich im lib-Ordner befinden. Die Warnung liegt vor, weil Datei1.dll außerhalb der Lib ist und während der Paketinstallation ignoriert wird. (Andere spezielle Ordner sind "Inhalt" und "Tools")

ich diese Struktur benutzt hatte:

Root 
    - lib 
    - File1.dll 
    - File2.dll 
    - File3.dll 

See: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions für weitere Details.

+19

Sorry, aber was Lib-Ordner? Ich habe dieses Tutorial (http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package) zum Erstellen eines Pakets aus einer Assembly verfolgt und sehe keine lib-Ordner - nur ein Befehl zum Erstellen einer spec-Datei und dann eine nupkg-Datei – DevDave

+2

@DevDave, siehe: http://docs.nuget.org/Create/Enforced-Package-Conventions –

0

Alexandre bezieht sich auf den Ordner "lib", der beim Erstellen eines NuGet-Pakets erstellt wird. Sie können das .nupkg wie jede andere Zip-Datei öffnen. Dort sehen Sie einen lib \ netXX-Ordner, in dem XX die Version des .NET-Frameworks ist, auf das Sie ausgerichtet sind. Stellen Sie beim Packen Ihrer NuGet-Datei sicher, dass sich Datei1.dll im lib-Ordner befindet.

7

Sie können

durch Zugabe von unten innerhalb Tag in nuspec Datei verweist auf eine andere DLL hinzufügen
<package> 
    <metadata> 
     ... 
</metadata> 
<files> 
<file src="..\ReferencedFolder\*.*" target="lib\net40\" /> 
</files> 
</package> 
+0

Ich fand, dass 'src =" ../ Xxx ".. .' hat nicht funktioniert (obwohl die Dokumente es sagen); Da 'src' relativ zum' BasePath'-Parameter ist, können Sie 'BasePath' in einen Stamm aller Dateien ändern, die Sie aufnehmen möchten. –

17

ich in dieses Problem lief. Nuget rechnet mit einer Struktur, die wie folgt aussieht:

root 
    - lib 
    - net40 
     - File1.dll 
     - File2.dll 
     - File3.dll 

net40 oder net20 oder net45 entsprechend Ihrer .net-Version.

Lauf

nuget pack yourlibrary.nuspec 

es zu verpacken.

Das wird den Dir Großhandel packen und es in den nupkg legen. Die Fehlermeldungen verschwinden an diesem Punkt.

+7

Wo wird die unterstützte Liste von 'net20',' net40', 'net45', ... gepflegt? Müssen diese nur die Einbindung der Assembly in ein älteres Projekt verhindern, wenn sie hinzugefügt wird (anstatt nur die Dateien unter 'lib' zu setzen)? Wird diese zusätzliche Struktur beim Erstellen des Pakets normalerweise manuell verwaltet oder kann die .NET-Version der Assembly erkannt und verwendet werden? – brianary

+2

@brianary ich glaube, dass die Liste hier ist: https://docs.microsoft.com/en-us/nuget/schema/target-frameworks#supported-frameworks und dieser Link dokumentiert die obige Ordnerstruktur vollständiger: https: // docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks –

+0

Hier zeigt net40 das Framework, auf dem File * .dll gebaut wird. ODER der Rahmen des Projekts, in dem Sie diese (Datei * .dll) dlls verwenden/verweisen werden? – gmuhammad

9

Mit der Version von NuGet, die ab diesem Post aktuell ist (und ich nehme auch spätere Versionen an), können Sie die .csproj-Datei zusammen mit der .nuspec-Datei zum Erstellen des Pakets verwenden. Was wir gemacht haben, war eine .nuspec-Datei zu erstellen (mit nuget spec und dann anzupassen) und sie in das Projekt aufzunehmen.

Mit dem kundengebundenen.nuspec Datei verwenden wir den Befehl:

nuget pack sample.csproj -IncludeReferencedProjects 

An diesem Punkt den .nupkg gebaut und Probleme nicht emittieren. Die .nupkg-Datei wurde im normalen Ausgabeordner angezeigt (in meinem Standardfall bin \ debug).

+1

Dies ist eine schlechte Antwort. Mit VS 2015 mit nugget 3.3 und Ihrem genauen Befehl, bekomme ich immer noch diesen Fehler. – Mario

+0

Das hat für mich funktioniert. Vielen Dank! –

0

Sie gelangen in den Ordner "lib", indem sie in Ihrem bin \ debug oder bin \ release-Ordner in .NET enthalten sind. Sie müssen also das Projekt kompilieren, damit es auf den externen DLLs lokal kopiert wird, damit es beim Kompilieren in den bin-Ordner aufgenommen wird.

0

Ich verwendete Prof Von Lemongargle 'Lösung, und für mich war eine großartige Lösung. Wichtig:

  1. Include-Spez-Datei (mit der rechten Klick-> In-Projekt) im Projekt
  2. Geben Datei denselben Namen Ihres Projekts (myproject.csproj, myproject.nuspec)
  3. spec

Dies funktioniert perfekt in Visual Studio 2012.

Verwandte Themen