1

Je dispose d'une bibliothèque de classes dans laquelle j'accède à un fichier à partir du chemin d'application en utilisant le code ci-dessous. Il ne fonctionnera pas sur azur car il ne peut pas trouver le chemin d'application. Comment le faire fonctionner azur car il fonctionne bien sur ma machine locale.Obtenir le chemin d'accès au fichier dans le projet de bibliothèque de classes asp.net sur Azure WebApp

private string GetProjectPath() 
     { 
      string SolutionName = "MyApi.sln"; 
      //Get name of the target project which we want to test 

      var projectName = typeof(TerminationMatchInquiry).GetTypeInfo().Assembly.GetName().Name; 

      //Get currently executing test project path 
      var applicationBasePath = new Uri((typeof(TerminationMatchInquiry).GetTypeInfo().Assembly.CodeBase)).LocalPath; 
      //Find the folder which contains the solution file. We then use this information to find the 
      //target project which we want to test 
      DirectoryInfo directoryInfo = new DirectoryInfo(applicationBasePath); 
      do 
      { 
       var solutionFileInfo = new FileInfo(Path.Combine(directoryInfo.FullName, SolutionName)); 
       if (solutionFileInfo.Exists) 
       { 
        return Path.GetFullPath(Path.Combine(directoryInfo.FullName, projectName)); 
       } 
       directoryInfo = directoryInfo.Parent; 
      } 
      while (directoryInfo.Parent != null); 

      throw new Exception($"Solution root could not be located using application root {applicationBasePath}"); 
     } 
+0

Vous voulez dire Azure WebApp? – Youngjae

+0

Oui Azure WebApp – maxspan

+0

Bien sûr, il ne le trouvera pas sur azur! Lorsque vous déployez votre application, vous ** ne déployez pas votre code source ** juste les artefacts binaires créés par le processus de construction/publication – Tseng

Répondre

3

Pour acquérir un chemin de fichier exact sur votre application Web, vous devrez peut-être effectuer des essais et erreurs.

Le code ci-dessous est ce que j'ai utilisé dans le projet ASP.NET. Supposons que vous avez un dossier nommé scenarios et filename variable;

string rootPath; 
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("HOME"))) 
    rootPath = Environment.GetEnvironmentVariable("HOME") + "\\site\\wwwroot\\bin"; 
else if (HttpContext.Current != null) 
    rootPath = HttpContext.Current.Server.MapPath("~"); 
else 
    rootPath = "."; 
string path = rootPath + "\\scenarios\\" + filename; 

Voyons les valeurs sur chaque condition;

  1. Environment.GetEnvironmentVariable("HOME"): Cette valeur est pour Azure WebApp. Azure WebApp possède des variables d'environnement par défaut du répertoire racine de l'hôte. Vous pouvez vérifier les variables fournies comme here

  2. HttpContext.Current: Cette valeur est pour iisexpress avec OWIN selfhost lorsque vous développez sur le bureau.

  3. rootPath = "."; Cette valeur est pour IIS classique.

Ainsi, le meilleur raccourci pour trouver le chemin du fichier pourrait être publié,

  1. Voir votre fichier est bien déployé sur WebApp. Vous pouvez voir les fichiers publiés avec WebApp > Advanced Tools (a.k.a Kudu) menu > Debug Console menu on top > CMD. Il vous montrera l'interface de l'explorateur sur le navigateur.
  2. Essayez d'écrire un journal avec filepath like; Environment.GetEnvironmentVariable("HOME") + "\\site\\wwwroot\\bin\\" + yourdirectory + "\\" + SolutionName et vérifiez que le fichier est chargé avec succès.
+0

Ce code pour le noyau asp.net. – maxspan

+0

@maxspan // 'Environment.GetEnvironmentVariable' fonctionne aussi pour le noyau. Essayez-le d'abord :) 'HttpContext.Current' a une alternative que ce lien décrit https://stackoverflow.com/questions/38571032/how-to-get-httpcontext-current-in-asp-net-core Vous pouvez omettre de vérifier cette valeur que votre configuration de dev fonctionne très bien. – Youngjae