2010-07-09 9 views
13

Mon entreprise utilise une combinaison de quelques tables de base de données, d'une interface Web et d'une application «export» pour gérer nos ressources de chaînes sur nos sites Web.Ai-je besoin du fichier resx Designer.cs?

L'application d'exportation fonctionnait très bien lorsque nous utilisions VS2008, mais depuis le passage à VS2010, les ressources disposent maintenant d'un fichier designer.cs "en dessous" dans l'explorateur de solutions.

Le problème est que l'application "export" génère uniquement les fichiers .resx et non les fichiers designer.cs sous-jacents.

Alors, est-il un moyen de ne pas avoir ces fichiers Designer.cs, ou encore un moyen de re-générer automatiquement (ou même une commande de la demande d'exportation pourrait appeler pour les re-générer)

Répondre

7

De MSDN nous avons:

Compiling Resources into Assemblies

Lorsque vous créez votre application, Visual studio invoque le resgen.exe outil pour convertir vos res d'application ources dans une classe interne appelée Ressources. Cette classe est contenue dans le fichier Resources.Designer.cs qui est imbriqué sous le fichier Resources.resx dans la solution Explorer. La classe Resources encapsule toutes vos ressources dans le projet en static readonly pour obtenir les propriétés afin de fournir des ressources fortement typées au moment de l'exécution . Lorsque vous construisez dans Visual C# IDE, toutes les données de ressources encapsulées, y compris les ressources qui ont été incorporés dans le fichier .resx et les fichiers liés, est compilé directement dans l'ensemble d'application (le .exe ou fichier .dll). Dans d'autres mots , l'IDE Visual C# utilise toujours l'option compilateur/resource . Si vous créez à partir de la ligne de commande, vous pouvez spécifier l'option/linkresource du compilateur qui vous permettra de déployer les ressources dans un fichier distinct de l'assembly d'application principale . Ceci est un scénario avancé et est seulement nécessaire dans certaines situations rares.

+1

merci, parfois c'est juste savoir quoi chercher :) Je vais regarder dans ce lundi matin. –

+1

fantastique, je viens de changer mon application d'exportation pour exécuter l'outil resgen s'il y avait aussi un fichier .designer.cs (> 0 octets) dans le même dossier que le fichier .resx. (Je ne pouvais pas attendre jusqu'à lundi, la curiosité a eu le meilleur de moi) –

+0

hmm, cela n'a pas fonctionné correctement. Il compilé très bien, mais l'application s'est écrasée quand je l'ai couru. Donc, j'ai essayé une approche différente qui fonctionne presque. J'ai commencé une nouvelle question, parce que c'est un problème légèrement différent. http://stackoverflow.com/questions/3230585/run-custom-tool-for-resx-files-in-mvc2-project-from-an-external-application-sc –

11

J'ai rencontré un problème lorsque VS 2010 ne régénérait pas les fichiers Designer.cs et ne trouvait pas la solution ailleurs.

J'ai été capable de les régénérer cependant, sans aller à la ligne de commande.

Pour résoudre le problème dans Visual Studio 2010 je l'ai fait ce qui suit:

  1. supprimé le fichier Designer.cs
  2. faites un clic droit sur le fichier principal resx
  3. sélectionnés Run Custom Tool

Cela a reconstruit le fichier Designer.cs.

espoir qui pourrait aider quelqu'un d'autre à l'avenir ..

+1

bien sûr, la propriété Outil personnalisé du fichier resx devrait contenir quelque chose comme 'PublicResXFileCodeGenerator' (et dès que vous modifiez ce champ, le fichier du concepteur est automatiquement généré) – ekkis

+0

Nous utilisons un outil personnalisé pour synchroniser les fichiers resx de notre serveur de langue. Cette astuce est géniale pour obtenir VS pour reconstruire le fichier code-behind associé! –

1

Si vous préférez générer automatiquement les fichiers * .designer.cs de fichiers * .resx lors de la construction du projet, l'approche suivante a travaillé pour nous et pourrait fonctionner aussi bien pour vous:

  1. Fermer votre solution
  2. Ouvrir dans un fichier XML du fichier de projet dans lequel vous souhaitez générer automatiquement les fichiers de concepteur. Notez que vous devez le charger en tant que fichier XML. Vous ne pouvez pas modifier ces paramètres via la page de propriétés du projet.
  3. Ajouter une cible au projet comme suit:
 
<Target Name="GenerateDesignerFiles"> 
    <Message Text="Deleting old Designer Files..."/> 
    <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).resources')"/> 
    <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"/> 
    <Message Text="Generating Designer Files..."/> 
    <GenerateResource 
     Sources="@(EmbeddedResource)" 
     StronglyTypedLanguage="C#" 
     StronglyTypedClassName="%(Filename)" 
     StronglyTypedNamespace="@(EmbeddedResource->'%(CustomToolNamespace)')" 
     StronglyTypedFileName="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')" 
     PublicClass="true" 
     > 
    </GenerateResource> 
    <Message Text="Generating Designer Files complete."/> 
</Target> 
  1. localiser la cible nommée "BeforeBuild". Cette cible peut être mise en commentaire (par défaut).
  2. Modifier la « BeforeBuild » cible comme suit:
 
<Target Name="BeforeBuild"> 
    <CallTarget Targets="GenerateDesignerFiles"/> 
</Target> 

Cette solution est basée sur tous les fichiers de ressources étant répertoriés comme « EmbeddedResource » dans un ItemGroup du fichier de projet, par exemple

 
<ItemGroup> 
    <EmbeddedResource Include="Resources\Creditor\Display_Creditor.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>Display_Creditor.Designer.cs</LastGenOutput> 
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> 
    </EmbeddedResource> 
    <EmbeddedResource Include="Resources\InboundEmail\Tooltip_InboundEmailDetails.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>Tooltip_InboundEmailDetails.Designer.cs</LastGenOutput> 
    <CustomToolNamespace>Acme.Web.Resources.InboundEmail</CustomToolNamespace> 
    </EmbeddedResource> 
    <EmbeddedResource Include="Resources\Creditor\Tooltip_CreditorDetails.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>Tooltip_CreditorDetails.Designer.cs</LastGenOutput> 
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> 
    </EmbeddedResource> 
</ItemGroup> 

Avertissement: Ceci a été testé avec Visual Studio 2013 et les projets C#. Il peut ou peut ne pas fonctionner pour d'autres projets et/ou d'autres versions de Visual Studio.

+0

Cela fonctionne avec VS2015.Légère remarque cependant: je devais fournir le 'CustomToolNamespace', sinon il génèrerait un fichier' .cs' nommé égal au fichier '.resx'. – Caramiriel

0

Essayez ceci:

  • Faites un clic droit sur le fichier resx
  • Cliquez sur les propriétés
  • Définissez les propriétés:
  • Copier sortie répertoire: Copiez toujours
  • outil personnalisé: PublicResXFileCodeGenerator

Sauvegardez et reconstruisez. Problème résolu.

Questions connexes