what visual studio source packagereference official located files content dependencies package nuget nuget-package nuspec

dependencies - visual - No incluya dependencias del archivo packages.config al crear el paquete NuGet



what is nuspec file (6)

Evita que tu paquete dependa de otros paquetes

A partir de NuGet 2.7, hay un nuevo atributo DependencyDependency que puede agregarse a un nodo de package en el archivo packages.config su proyecto . Entonces, si su proyecto incluye un paquete NuGet que no desea que su paquete NuGet incluya como una dependencia, puede usar este atributo así:

<?xml version="1.0" encoding="utf-8"?> <packages> <package id="CreateNewNuGetPackageFromProjectAfterEachBuild" version="1.8.1-Prerelease1" targetFramework="net45" developmentDependency="true" /> </packages>

La parte importante que debe agregar aquí es developmentDependency="true" .

Evita que tu paquete de desarrollo dependa de otros paquetes

Si está creando un paquete NuGet de desarrollo para que otros lo consuman, sabiendo que no querrán tener una dependencia en sus paquetes, entonces puede evitar que los usuarios tengan que agregar manualmente ese atributo a su archivo packages.config usando el NuGet 2.8 atributo DevelopmentDependency en la sección de metadatos de su archivo .nuspec . Esto agregará automáticamente el atributo developmentDependency al archivo packages.config cuando el paquete sea instalado por otros. El problema aquí es que requiere que el usuario tenga instalado al menos NuGet 2.8. Afortunadamente, podemos hacer uso del atributo NuGet 2.5 minClientVersion para garantizar que los usuarios tengan al menos v2.8 instalado; de lo contrario, se les notificará que deben actualizar su cliente NuGet antes de que puedan instalar el paquete.

Tengo un paquete de desarrollo NuGet que fue perfecto para. Aquí es cómo se ve mi archivo .nuspec, que muestra cómo usar los atributos minClientVersion y developmentDependency (líneas 3 y 20 respectivamente):

<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata minClientVersion="2.8"> <id>CreateNewNuGetPackageFromProjectAfterEachBuild</id> <version>1.8.1-Prerelease1</version> <title>Create New NuGet Package From Project After Each Build</title> <authors>Daniel Schroeder,iQmetrix</authors> <owners>Daniel Schroeder,iQmetrix</owners> <licenseUrl>https://newnugetpackage.codeplex.com/license</licenseUrl> <projectUrl>https://newnugetpackage.codeplex.com/wikipage?title=NuGet%20Package%20To%20Create%20A%20NuGet%20Package%20From%20Your%20Project%20After%20Every%20Build</projectUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Automatically creates a NuGet package from your project each time it builds. The NuGet package is placed in the project''s output directory. If you want to use a .nuspec file, place it in the same directory as the project''s project file (e.g. .csproj, .vbproj, .fsproj). This adds a PostBuildScripts folder to your project to house the PowerShell script that is called from the project''s Post-Build event to create the NuGet package. If it does not seem to be working, check the Output window for any errors that may have occurred.</description> <summary>Automatically creates a NuGet package from your project each time it builds.</summary> <releaseNotes>- Changed to use new NuGet built-in method of marking this package as a developmentDependency (now requires NuGet client 2.8 or higher to download this package).</releaseNotes> <copyright>Daniel Schroeder 2013</copyright> <tags>Auto Automatic Automatically Build Pack Create New NuGet Package From Project After Each Build On PowerShell Power Shell .nupkg new nuget package NewNuGetPackage New-NuGetPackage</tags> <developmentDependency>true</developmentDependency> </metadata> <files> <file src="../New-NuGetPackage.ps1" target="content/PostBuildScripts/New-NuGetPackage.ps1" /> <file src="Content/NuGet.exe" target="content/PostBuildScripts/NuGet.exe" /> <file src="Content/BuildNewPackage-RanAutomatically.ps1" target="content/PostBuildScripts/BuildNewPackage-RanAutomatically.ps1" /> <file src="Content/UploadPackage-RunManually.ps1" target="content/PostBuildScripts/UploadPackage-RunManually.ps1" /> <file src="Content/UploadPackage-RunManually.bat" target="content/PostBuildScripts/UploadPackage-RunManually.bat" /> <file src="tools/Install.ps1" target="tools/Install.ps1" /> <file src="tools/Uninstall.ps1" target="tools/Uninstall.ps1" /> </files> </package>

Si no quiere forzar a sus usuarios a tener instalado al menos NuGet v2.8 antes de que puedan usar su paquete, entonces puede blog.danskingdom.com/… bloguear antes de que existiera el atributo de dependencia de desarrollo de NuGet 2.8.

Estoy usando Nuget para crear paquetes. Me gustaría crear un paquete que no contenga ningún archivo de dependencias (en el archivo .nuspec ) para ningún otro paquete de NuGet. Mi proyecto tiene dependencias de paquetes NuGet definidas en su archivo packages.config .

Primero creo el archivo .nuspec ...

C:/code/MySolution>.nuget/nuget.exe spec MyProject/MyProject.csproj

Edito el archivo .nuspec generado para que sea mínimo, sin dependencias.

<?xml version="1.0"?> <package > <metadata> <id>MyProject</id> <version>1.2.3</version> <title>MyProject</title> <authors>Example</authors> <owners>Example</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Example</description> <copyright>Copyright 2013 Example</copyright> <tags>example</tags> <dependencies /> </metadata> </package>

Luego construyo la solución y creo un paquete NuGet ...

C:/code/MySolution>.nuget/nuget.exe pack MyProject/MyProject.csproj -Verbosity detailed

Aquí está la salida de ese comando ...

Attempting to build package from ''MyProject.csproj''. Packing files from ''C:/code/MySolution/MyProject/bin/Debug''. Using ''MyProject.nuspec'' for metadata. Found packages.config. Using packages listed as dependencies Id: MyProject Version: 1.2.3 Authors: Example Description: Example Tags: example Dependencies: Google.ProtocolBuffers (= 2.4.1.473) Added file ''lib/net40/MyProject.dll''. Successfully created package ''C:/code/MySolution/MyProject.1.2.3.nupkg''.

El paquete .nupkg que se crea tiene un archivo .nuspec contenido dentro de él, pero incluye una sección de dependencias que no tenía en el archivo .nuspec original ...

<dependencies> <dependency id="Google.ProtocolBuffers" version="2.4.1.473" /> </dependencies>

Creo que esto está sucediendo debido a esto ... (de la salida anterior)

Found packages.config. Using packages listed as dependencies

¿Cómo puedo hacer que NuGet no resuelva automáticamente las dependencias y las inserte en el archivo .nuspec que se genera a partir del comando del pack ?

Estoy usando NuGet 2.2 actualmente. Además, no creo que este comportamiento haya ocurrido en una versión anterior de NuGet; Es esta una nueva característica"? No pude encontrar ninguna documentación que describa esta "característica" o cuándo se implementó.


De acuerdo con el problema # 1956 ( https://nuget.codeplex.com/workitem/1956 ) y solicitud de extracción 3998 ( https://nuget.codeplex.com/SourceControl/network/forks/adamralph/nuget/contribution/3998 ) esto La característica se ha incluido en la versión 2.4 versión 2.7.

Sin embargo, no puedo encontrar documentación sobre la función y aún no he pensado cómo usarla. Por favor, actualice esta respuesta si alguien sabe.

Actualización: el desarrollador actualizó el número 1956. La función no se incluyó en la versión 2.4, pero se retrasó a la próxima versión 2.7. Es por eso que todavía no está documentado.


En la versión 2.7 hay una opción llamada developmentDependency que se puede configurar en package.config para evitar incluir dependencia.

Excluyendo dependencias de desarrollo al crear paquetes

<?xml version="1.0" encoding="utf-8"?> <packages> <package id="jQuery" version="1.5.2" /> <package id="netfx-Guard" version="1.3.3.2" developmentDependency="true" /> <package id="microsoft-web-helpers" version="1.15" /> </packages>


No estoy seguro de por qué querría ignorar las dependencias que su paquete NuGet requiere para ejecutar, pero ¿ha pensado en usar la herramienta NuGet Package Explorer para crear su paquete?


Puede especificar explícitamente qué archivos incluir y luego ejecutar el comando del paquete en el propio archivo nuspec.

<?xml version="1.0"?> <package > <metadata> <id>MyProject</id> <version>1.2.3</version> <title>MyProject</title> <authors>Example</authors> <owners>Example</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Example</description> <copyright>Copyright 2013 Example</copyright> <tags>example</tags> <dependencies /> </metadata> <files> <file src="bin/Release/MyProject.dll" target="lib" /> </files> </package>

Debería establecer el atributo src con la ruta que es relativa al archivo nuspec aquí. Luego puedes ejecutar el comando pack.

nuget.exe pack MyProject/MyProject.nuspec


Si está utilizando el elemento PackageReference lugar del archivo package.config , aquí está la solución:

<PackageReference Include="Nerdbank.GitVersioning" Version="1.5.28-rc" PrivateAssets="All" />

o

<PackageReference Include="Nerdbank.GitVersioning" Version="1.5.28-rc"> <PrivateAssets>all</PrivateAssets> </PackageReference>

Discusión relacionada con GitHub