web-dev-qa-db-fra.com

Ajouter un fichier sous forme de lien dans Visual Studio - Debug vs Publish

Chaque fois que je dois lier un fichier à un projet ASP.NET en tant que lien, il y a toujours quelque chose que j'oublie de faire, car Visual Studio est trop bogué et gênant avec ceux-ci . Il y a un bug/une limitation avec cela, il ne copie pas le fichier dans le dossier de sortie Debug, et nous devons également modifier les propriétés du fichier afin qu'il soit également copié dans le dossier de sortie Publier.

J'ai appris cela à la dure, après de nombreuses recherches, et j'ai créé une cible AfterBuild pour faciliter ce processus. Cependant, il reste encore du travail manuel à faire lors de l'ajout du fichier.

Voici un exemple pour un projet que je maintiens. Supposons que nous voulions ajouter le fichier YIUCARD dans le dossier «utilitaires» du projet ASP.NET.

1) Cliquez avec le bouton droit de la souris sur le dossier «Utilitaires» de Visual Studio et sélectionnez «Ajouter -> Élément existant».

Step 1

2) Sélectionnez le fichier à ajouter, en cliquant dessus UNE FOIS (ne double-cliquez pas).

Step 2

3) Cliquez sur la flèche à côté du bouton “Ajouter” et sélectionnez “Ajouter comme lien”.

Step 3

Pour le moment, cela ne fera rien. Le fichier ne sera copié dans aucun dossier (Debug and Publish). Il vient d'être ajouté au projet. 

4) Cliquez avec le bouton droit dans le fichier et ouvrez Propriétés.

Step 4

5) Changez: “Action de construction” en “Contenu” “Copier dans le répertoire de sortie” en “Copier toujours”

Step 5

À ce stade, le fichier sera copié dans le dossier de sortie Publier (où que nous définissions lors de la publication) . Cependant, lorsque nous déboguons localement (F5), cela ne fonctionnera pas car le fichier n’est pas copié dans le fichier local. utilitaires "sur la base de code.

6) Enregistrez les modifications sur Visual Studio en sélectionnant «Enregistrer tout». Cela permet de sauvegarder le fichier «.csproj», car nous y avons apporté des modifications et nous allons maintenant le modifier manuellement.

Step 6

7) Ouvrez le fichier “.csproj” dans Notepad ++.

Step 7

8) Ajoutez le fichier à l'événement "BeforeBuild" (voici le mien):

Step 8

 <Target Name="BeforeBuild">
    <ItemGroup>
      <UtilitiesFiles Include="..\path\to\file\REDOPXX.NEW" />
      <UtilitiesFiles Include="..\path\to\file\REDFMTST" />
      <UtilitiesFiles Include="..\path\to\file\JOBCARD" />
      <UtilitiesFiles Include="..\path\to\file\YIUCARD" />
    </ItemGroup>
    <Copy SourceFiles="@(UtilitiesFiles)" DestinationFolder=".\utilities" SkipUnchangedFiles="true" />
  </Target>

9) J'ai un événement "AfterBuild" pour le mode de publication qui publie automatiquement le projet pour moi, de sorte que les fichiers vont directement dans le dossier de sortie que je veux:

  <Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' ">
    <PropertyGroup>
      <OutputDir>..\path\to\publish\MyProject</OutputDir>
    </PropertyGroup>
    <Message Importance="High" Text="Output DIR: $(OutputDir)" />
    <RemoveDir Directories="$(OutputDir)" ContinueOnError="true" />
    <MSBuild Projects="MyProject.csproj" Properties="Configuration=$(Configuration);WebProjectOutputDir=$(OutputDir);OutDir=$(OutputDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
  </Target>

10) Enregistrez le fichier dans Notepad ++ et rechargez-le dans Visual Studio.

Step 10

Lorsque vous construisez le projet, le fichier sera copié dans les dossiers Debug et Release/Publish!

Cependant, j'aimerais savoir s'il existe un moyen plus simple et intuitif de le faire.

Vous pouvez dire que cela serait corrigé en modifiant le dossier de sortie Debug par le même dossier que le dossier Release/Publish, afin que les fichiers soient là après la première publication . Cependant, veuillez noter qu'il y a un bogue. avec cela aussi. Si j'utilise un dossier de sortie autre que "bin \", les fichiers aspx se plaindront de ne pas trouver les assemblys. Même si je règle "Copier dans le répertoire de sortie" sur "Copier toujours", il se plaindra que "Global.asax.cs" est introuvable.

S'il vous plaît voir ces questions connexes:

Message d'erreur d'analyse: Impossible de charger le type 'TestMvcApplication.MvcApplication'

"Impossible de charger le type [Namespace] .Global" me causant un chagrin

Est-ce que cela est corrigé/amélioré dans les nouvelles versions de Visual Studio?

34
Nuno

Le MSBuild.WebApplication.CopyContentLinkedFiles NuGet peut vous aider. Ce paquet ajoute une cible MSBuild qui copie tous les fichiers de contenu ajoutés en tant que lien vers le dossier de l'application Web lors de la construction.

10
Dejan

Je pense que l’une des meilleures façons de faire est de créer un lien symbolique comme vous le souhaitez… .. Il vous sera utile de gérer un fichier qui doit toujours être identique.

0
jornathan

Si l'objectif est d'inclure des dossiers de contenu (scripts, images, par exemple), vous ne devez pas gérer les fichiers individuels. Au lieu de cela, incluez ces dossiers dans votre compilation et publiez des fichiers. 

Lorsque des fichiers doivent être ajoutés/supprimés, il suffit de les mettre à jour dans le dossier de contenu. C’est essentiellement ainsi que nous traitons les fichiers d’aide car ils ne sont pas gérés par les développeurs. 

Découvrez ces liens:

Est-il possible d'inclure automatiquement les fichiers de contenu dans le fichier de projet asp.net?

Déploiement Web ASP.NET à l'aide de Visual Studio: Déploiement de fichiers supplémentaires

0
Keith