Cómo incluir un archivo resx en un paquete Nuget

Aug 19 2020

Tengo un proyecto .Net Framework 4.6.1 a partir del cual hago un paquete nuget. Este paquete nuget simplemente instala 2 dlls y un par de archivos de contenido que funcionan bien.

El problema es que ahora agregué una cadena de recursos a través de un archivo resx que reside en:

~\App_Data\Global\Resources\resource-strings.resx

Y no sé cómo hacer que ese archivo sea parte del paquete nuget correctamente. Cuando creo el .nupkg, veo el archivo resx allí, pero cuando lo instalo en otro proyecto, el archivo resx debería copiarse en la carpeta App_Data \ Global \ Resources, pero no es así.

¿Es posible?

Por lo que investigué, creo que también tengo que hacer algo con los archivos de destino + configuración nuspec, pero nada de lo que he probado funciona.

Literalmente solo necesito copiar el archivo resx. No hay nada más complicado que eso.

Respuestas

PerryQian-MSFT Aug 20 2020 at 06:02

Claro . Es posible y puede hacerlo nuget. Dado que desea que este archivo de recursos se copie en la carpeta del proyecto asp net de destino, puede intentar los siguientes pasos:

================================================ ===

Primero , si desea instalar este net461paquete nuget en un net frameworkproyecto asp net, debe usar el nodo de contenido en el xxx.nusepcarchivo

Primero, asegúrese de que la Acción de compilación de resource-strings.resx sea Recurso incrustado en lugar de Contenido .

1) primero , ejecute el comando cmd: cd xxxx(project folder path)y luego ejecute nuget specpara generar el archivo nuspec. Estos son suficientes:

2) abra el nuspecarchivo y agregue el nodo de contenido:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>xxx</id>
        <version>xxx</version>
        <title>xxx</title>
        <authors>xxx</authors>
        ............       
    </metadata>
    <files>
        <file src="~\App_Data\Global\Resources\resource-strings.resx(the path of the file in net framework 4.6.1 project)" target="content\App_Data\Global\Resources\resource-strings.resx" />
    </files>
</package>

3) luego guarde el nuspecarchivo y ejecútelo nuget packpara generar el nupkg.

Antes de instalar el paquete nuget, primero debe limpiar las cachés nuget para eliminar las versiones antiguas incorrectas del nuget.

Cuando instale este paquete, el archivo se copiará en la ruta raíz App_Data\Global\Resources\resource-strings.resxdel proyecto web.

================================================ ==

Si desea instalar este paquete en un nuevo proyecto sdk (Net Core o xxx con el formato de administración de nuget PackageReference), podría crear un archivo de destino con una tarea de copia.

1) agregue una carpeta llamada build en el proyecto net framework 4.6.1 y luego agregue un archivo llamado <Package_id>.propsfile.

Tenga en cuenta que debe asegurarse de que el ID del paquete nuget sea el mismo que el de <Package_id>.props. Sugerencia desde aquí .

2) agregue estos en <Package_id>.props:

  <Project>
      <Target Name="CopyFilesToProject" BeforeTargets="Build">
        <Message Text="Copy resource-strings.resx  to project" />
        <ItemGroup>
          <SourceScripts Include="$(MSBuildThisFileDirectory)..\content\**\*.*"/> </ItemGroup> <Copy SourceFiles="@(SourceScripts)" DestinationFiles="$(MSBuildProjectDirectory)\%(RecursiveDir)%(Filename)%(Extension)"/>
      </Target>
      
    </Project>

3) Modifique el xxx.nuspecarchivo así:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>xxx</id>
    <version>xxx</version>
    <title>xxx</title>
    <authors>xxx</authors>
    <owners>me</owners>
    ............
  </metadata>
 <files>
<file src="~\App_Data\Global\Resources\resource-strings.resx" target="content\App_Data\Global\Resources\resource-strings.resx" />
<file src="build\xxx(like package_id).props" target="build"/>
</files>

</package>

4) entonces debes usar el nuget packcomando para empaquetar este proyecto. Antes de instalar este paquete, primero debe limpiar las cachés nuget.

Después de instalar este paquete nuget, debe compilar su proyecto para ejecutar este destino de copia personalizado para copiar el archivo en su proyecto principal.

Además , hay un problema similar al respecto.