microsoft - nuget package que es
NuGet agrega referencia externa (2)
Tengo un archivo .nuspec para mi proyecto, que hace referencia a una DLL de terceros a la que el proyecto, incluido mi paquete, debe hacer referencia.
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Locked against log4net 1.2 - less than 1.2.11 which has breaking changes</releaseNotes>
<copyright>Copyright 2012 blah blah</copyright>
<dependencies>
<dependency id="log4net" version="[1.2,1.2.11)" />
<dependency id="My.Other.Project" />
</dependencies>
<references>
<reference file="Third.Party.dll" />
</references>
Si intento ejecutar el paquete nuget.exe My.Project.csproj desde el directorio con .csproj y el archivo .nuspec, obtengo
Referencia de ensamblaje no válida ''Third.Party.dll''. Asegúrese de que exista un archivo llamado ''Third.Party.dll'' en el directorio lib.
He creado. / Lib. / Bin / Debug / lib. / Obj / lib
y el archivo está en los tres lugares. ¿De dónde REALMENTE quiere la carpeta lib?
El elemento < references > define las referencias que se agregarán al proyecto cuando se instale su paquete. Lo que te falta es la parte que define los archivos que forman parte de tu paquete y que se hace con el elemento < files >. Por lo tanto, su archivo .nuspec debe tener un aspecto similar al siguiente:
<?xml version="1.0"?>
<package>
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Locked against log4net 1.2 - less than 1.2.11 which has breaking changes</releaseNotes>
<copyright>Copyright 2012 blah blah</copyright>
<dependencies>
<dependency id="log4net" version="[1.2,1.2.11)" />
<dependency id="My.Other.Project" />
</dependencies>
<references>
<reference file="Third.Party.dll" />
</references>
</metadata>
<files>
<file src="lib/Third.Party.dll" target="lib"/>
</files>
</package>
La única diferencia es el elemento de archivos después del elemento de metadatos.
Tuve el mismo problema y así es como lo resolví. Me pareció extraño, pero parece que funciona y no necesito crear un paquete nuget para mi ensamblaje de terceros de esta manera.
Mi .nuspec se ve así:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Some release notes</releaseNotes>
<copyright>Copyright 2012</copyright>
<tags>some,tags</tags>
<references>
<reference file="thirdparty.dll"></reference>
<reference file="ThisAssemblyName.dll"></reference>
</references>
</metadata>
<files>
<file src="web.config.transform" target="content"/>
<file src="lib/net40/thirdparty.dll" target="lib/net40"/>
</files>
</package>
Como puede ver, tuve que agregar un nodo de archivo para copiar mi dll de terceros en la carpeta de destino lib / net40 (en mi caso). Luego tuve que agregar nodos de "referencia" tanto para el archivo thirdparty.dll como para el ensamblado que este paquete NuGet estaba creando. Siento que la solución de Matt Ward debería ser correcta, pero no funcionó para mí hasta que agregué el nodo de referencia (redundante).
¡Espero que eso ayude!
Gracias
Mustafa