Comment inclure un fichier resx dans un package Nuget

Aug 19 2020

J'ai un projet .Net Framework 4.6.1 à partir duquel je crée un package nuget. Ce package nuget installe simplement 2 dll et quelques fichiers de contenu qui fonctionnent correctement.

Le problème est que j'ai maintenant ajouté une chaîne de ressources via un fichier resx qui réside dans:

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

Et je ne sais pas comment intégrer correctement ce fichier au package nuget. Lorsque je crée le .nupkg, je vois le fichier resx là-bas, mais lorsque je l'installe sur un autre projet, le fichier resx doit être copié dans le dossier App_Data \ Global \ Resources, mais ce n'est pas le cas.

C'est possible?

D'après ce que j'ai étudié, je pense que je dois aussi faire quelque chose avec les fichiers cibles + la configuration nuspec, mais rien de ce que j'ai essayé ne fonctionne.

J'ai juste besoin de copier le fichier resx. Rien de plus compliqué que ça.

Réponses

PerryQian-MSFT Aug 20 2020 at 06:02

Bien sûr . C'est possible et peut être fait par nuget. Puisque vous souhaitez que ce fichier de ressources soit copié dans votre dossier de projet asp net cible, vous pouvez essayer les étapes suivantes:

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

Tout d'abord , si vous souhaitez installer ce net461package nuget dans un net frameworkprojet asp net, vous devez utiliser le nœud de contenu dans le xxx.nusepcfichier

Tout d'abord, assurez-vous que l' action de génération de resource-strings.resx est Ressource intégrée plutôt que Contenu .

1) d' abord , exécutez la commande cmd: cd xxxx(project folder path)puis exécutez nuget specpour générer le fichier nuspec. Celles-ci suffisent:

2) ouvrez le nuspecfichier et ajoutez le nœud de contenu:

<?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) puis enregistrez le nuspecfichier et exécutez nuget packpour générer le fichier nupkg.

Avant d'installer le package nuget, vous devez d'abord nettoyer les caches nuget pour supprimer les anciennes versions incorrectes du nuget.

Lorsque vous installez ce package, le fichier est copié dans le chemin racine App_Data\Global\Resources\resource-strings.resxdu projet Web.

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

Si vous souhaitez installer ce package dans un nouveau projet sdk (Net Core ou xxx avec le format de gestion de nuget PackageReference), vous pouvez créer un fichier cible avec une tâche de copie.

1) ajoutez un dossier appelé build dans le projet net framework 4.6.1, puis ajoutez un fichier appelé <Package_id>.propsfile.

Notez que vous devez vous assurer que l'ID du package nuget est le même que celui du <Package_id>.props. Indice d'ici .

2) ajoutez-les dans <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) Modifiez le xxx.nuspecfichier comme ceci:

<?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) alors vous devez utiliser la nuget packcommande pour emballer ce projet. Avant d'installer ce package, vous devez d'abord nettoyer les caches nuget.

Après avoir installé ce package nuget, vous devez générer votre projet pour exécuter cette cible de copie personnalisée afin de copier le fichier dans votre projet principal.

En outre , il y a un problème similaire à ce sujet.