Partager via


VirtualPathProvider Classe

Définition

Fournit un jeu de méthodes qui permettent à une application Web de récupérer des ressources à partir d'un système de fichiers virtuel.

public ref class VirtualPathProvider abstract : MarshalByRefObject
public abstract class VirtualPathProvider : MarshalByRefObject
type VirtualPathProvider = class
    inherit MarshalByRefObject
Public MustInherit Class VirtualPathProvider
Inherits MarshalByRefObject
Héritage
VirtualPathProvider

Exemples

L’exemple de code suivant est une VirtualPathProvider implémentation de classe qui crée un système de fichiers virtuel à l’aide des informations stockées dans un DataSet objet . L’exemple de code fonctionne avec les exemples de code pour les VirtualFile classes et afin VirtualDirectory de fournir des ressources virtuelles à partir d’un magasin de données chargé dans un DataSet objet .

Cet exemple comprend quatre parties : l’implémentation de classe VirtualPathProvider , un fichier de données XML utilisé pour remplir l’objet DataSet , un AppStart objet qui contient une AppInitialize méthode utilisée pour inscrire la VirtualPathProvider classe auprès du système de compilation et une page ASP.NET qui fournit des liens vers les fichiers virtuels.

Pour utiliser cet exemple de code dans une application, procédez comme suit.

  1. Créez un exemple d’application sur votre serveur Web.

  2. Copiez le code source de l’objet personnalisé VirtualPathProvider (voir ci-dessous) dans un fichier du répertoire de App_Code l’application.

  3. Copiez le code source de l’objet personnalisé VirtualDirectory (voir la section Exemple dans la rubrique vue d’ensemble de la VirtualDirectory classe) dans un fichier du répertoire de App_Code l’application.

  4. Copiez le code source de l’objet personnalisé VirtualFile (voir la section Exemple dans la rubrique vue d’ensemble de la VirtualFile classe) dans un fichier du répertoire de App_Code l’application.

  5. Copiez le code source de l’objet AppStart (voir ci-dessous) dans un fichier du répertoire de App_Code l’application.

  6. Copiez les données XML (voir ci-dessous) dans un fichier nommé XMLData.xml dans un fichier du répertoire de App_Data l’application.

  7. Copiez le default.aspx fichier (voir ci-dessous) dans le répertoire racine de l’exemple d’application. Utilisez un navigateur web pour ouvrir le default.aspx fichier, puis cliquez sur les liens de la page pour afficher le contenu des fichiers virtuels.

Le premier exemple est une classe personnalisée VirtualPathProvider . Les DirectoryExists méthodes et FileExists sont remplacées pour indiquer si un répertoire demandé est présent dans le système de fichiers virtuel. Les GetDirectory méthodes et GetFile sont remplacées pour retourner des instances personnalisées VirtualDirectory et VirtualFile contenant des informations du système de fichiers virtuel.

La classe fournit également une GetVirtualData méthode utilisée par les VirtualDirectory classes et VirtualFile pour accéder à l’objet DataSet contenant les données du système de fichiers virtuel. Dans une implémentation de production, cette méthode est généralement implémentée dans un objet métier chargé d’interagir avec le magasin de données.

using System;
using System.Data;
using System.Security.Permissions;
using System.Web;
using System.Web.Caching;
using System.Web.Hosting;

namespace Samples.AspNet.CS
{
  [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Medium)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.High)]
  public class SamplePathProvider : VirtualPathProvider
  {
    private string dataFile;

    public SamplePathProvider()
      : base()
    {
    }

    protected override void Initialize()
    {
      // Set the datafile path relative to the application's path.
      dataFile = HostingEnvironment.ApplicationPhysicalPath + "App_Data\\XMLData.xml";
    }

    /// <summary>
    ///   Data set provider for the SampleVirtualDirectory and
    ///   SampleVirtualFile classes. In a production application
    ///   this method would be on a provider class that accesses
    ///   the virtual resource data source.
    /// </summary>
    /// <returns>
    ///   The System.Data.DataSet containing the virtual resources 
    ///   provided by the SamplePathProvider.
    /// </returns>
    public DataSet GetVirtualData()
    {
      // Get the data from the cache.
      DataSet ds = (DataSet)HostingEnvironment.Cache.Get("VPPData");
      if (ds == null)
      {
        // Data not in cache. Read XML file.
        ds = new DataSet();
        ds.ReadXml(dataFile);

        // Make DataSet dependent on XML file.
        CacheDependency cd = new CacheDependency(dataFile);

        // Put DataSet into cache for maximum of 20 minutes.
        HostingEnvironment.Cache.Add("VPPData", ds, cd,
          Cache.NoAbsoluteExpiration,
          new TimeSpan(0, 20, 0),
          CacheItemPriority.Default, null);

        // Set data timestamp.
        DateTime dataTimeStamp = DateTime.Now;
        // Cache it so we can get the timestamp in later calls.
        HostingEnvironment.Cache.Insert("dataTimeStamp", dataTimeStamp, null,
          Cache.NoAbsoluteExpiration,
          new TimeSpan(0, 20, 0),
          CacheItemPriority.Default, null);
      }
      return ds;
    }

    /// <summary>
    ///   Determines whether a specified virtual path is within
    ///   the virtual file system.
    /// </summary>
    /// <param name="virtualPath">An absolute virtual path.</param>
    /// <returns>
    ///   true if the virtual path is within the 
    ///   virtual file sytem; otherwise, false.
    /// </returns>
    private bool IsPathVirtual(string virtualPath)
    {
      String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
      return checkPath.StartsWith("~/vrdir", StringComparison.InvariantCultureIgnoreCase);
    }

    public override bool FileExists(string virtualPath)
    {
      if (IsPathVirtual(virtualPath))
      {
        SampleVirtualFile file = (SampleVirtualFile)GetFile(virtualPath);
        return file.Exists;
      }
      else
            {
                return Previous.FileExists(virtualPath);
            }
        }

    public override bool DirectoryExists(string virtualDir)
    {
      if (IsPathVirtual(virtualDir))
      {
        SampleVirtualDirectory dir = (SampleVirtualDirectory)GetDirectory(virtualDir);
        return dir.Exists;
      }
      else
            {
                return Previous.DirectoryExists(virtualDir);
            }
        }

    public override VirtualFile GetFile(string virtualPath)
    {
      if (IsPathVirtual(virtualPath))
        return new SampleVirtualFile(virtualPath, this);
      else
        return Previous.GetFile(virtualPath);
    }

    public override VirtualDirectory GetDirectory(string virtualDir)
    {
      if (IsPathVirtual(virtualDir))
        return new SampleVirtualDirectory(virtualDir, this);
      else
        return Previous.GetDirectory(virtualDir);
    }

    public override CacheDependency GetCacheDependency(
      string virtualPath, 
      System.Collections.IEnumerable virtualPathDependencies, 
      DateTime utcStart)
    {
      if (IsPathVirtual(virtualPath))
      {
        System.Collections.Specialized.StringCollection fullPathDependencies = null;

        // Get the full path to all dependencies.
        foreach (string virtualDependency in virtualPathDependencies)
        {
          if (fullPathDependencies == null)
            fullPathDependencies = new System.Collections.Specialized.StringCollection();

          fullPathDependencies.Add(virtualDependency);
        }
        if (fullPathDependencies == null)
          return null;

        // Copy the list of full-path dependencies into an array.
        string[] fullPathDependenciesArray = new string[fullPathDependencies.Count];
        fullPathDependencies.CopyTo(fullPathDependenciesArray, 0);
        // Copy the virtual path into an array.
        string[] virtualPathArray = new string[1];
        virtualPathArray[0] = virtualPath;

        return new CacheDependency(virtualPathArray, fullPathDependenciesArray, utcStart);
      }
      else
            {
                return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
            }
        }
  }
}

Imports System.Data
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.Caching
Imports System.Web.Hosting


Namespace Samples.AspNet.VB
  <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Medium), _
   AspNetHostingPermission(SecurityAction.InheritanceDemand, level:=AspNetHostingPermissionLevel.High)> _
  Public Class SamplePathProvider
    Inherits VirtualPathProvider

    Private dataFile As String

    Public Sub New()
      MyBase.New()
    End Sub

    Protected Overrides Sub Initialize()
      ' Set the datafile path relative to the application's path.
      dataFile = HostingEnvironment.ApplicationPhysicalPath & _
        "App_Data\XMLData.xml"
    End Sub

    '   Data set provider for the SampleVirtualFile and
    '   SampleVirtualDirectory classes. In a production application
    '   this method would be on a provider class that accesses
    '   the virtual resource data source.
    '   The System.Data.DataSet containing the virtual resources
    '   provided by the SamplePathProvider.
    Public Function GetVirtualData() As DataSet
      ' Get the data from the cache.
      Dim ds As DataSet
      ds = CType(HostingEnvironment.Cache.Get("VPPData"), DataSet)

      If ds Is Nothing Then
        ' Data set not in cache. Read XML file.
        ds = New DataSet
        ds.ReadXml(dataFile)

        ' Make DataSet dependent on XML file.
        Dim cd As CacheDependency
        cd = New CacheDependency(dataFile)

        ' Put DataSet into cache for maximum of 20 minutes.
        HostingEnvironment.Cache.Add("VPPData", ds, cd, _
         Cache.NoAbsoluteExpiration, _
         New TimeSpan(0, 20, 0), _
         CacheItemPriority.Default, Nothing)

        ' Set data timestamp.
        Dim dataTimeStamp As DateTime
        dataTimeStamp = DateTime.Now
        ' Cache it so we can get the timestamp in later calls.
        HostingEnvironment.Cache.Add("dataTimeStamp", dataTimeStamp, Nothing, _
          Cache.NoAbsoluteExpiration, _
          New TimeSpan(0, 20, 0), _
          CacheItemPriority.Default, Nothing)
      End If
      Return ds
    End Function

    Private Function IsPathVirtual(ByVal virtualPath As String) As Boolean
      Dim checkPath As String
      checkPath = VirtualPathUtility.ToAppRelative(virtualPath)
      Return checkPath.StartsWith("~/vrdir", StringComparison.InvariantCultureIgnoreCase)
    End Function

    Public Overrides Function FileExists(ByVal virtualPath As String) As Boolean
      If (IsPathVirtual(virtualPath)) Then
        Dim file As SampleVirtualFile
        file = CType(GetFile(virtualPath), SampleVirtualFile)
        Return file.Exists
      Else
        Return Previous.FileExists(virtualPath)
      End If
    End Function

    Public Overrides Function DirectoryExists(ByVal virtualDir As String) As Boolean
      If (IsPathVirtual(virtualDir)) Then
        Dim dir As SampleVirtualDirectory
        dir = CType(GetDirectory(virtualDir), SampleVirtualDirectory)
        Return dir.exists
      Else
        Return Previous.DirectoryExists(virtualDir)
      End If
    End Function

    Public Overrides Function GetFile(ByVal virtualPath As String) As VirtualFile
      If (IsPathVirtual(virtualPath)) Then
        Return New SampleVirtualFile(virtualPath, Me)
      Else
        Return Previous.GetFile(virtualPath)
      End If
    End Function

    Public Overrides Function GetDirectory(ByVal virtualDir As String) As VirtualDirectory
      If (IsPathVirtual(virtualDir)) Then
        Return New SampleVirtualDirectory(virtualDir, Me)
      Else
        Return Previous.GetDirectory(virtualDir)
      End If
    End Function

    Public Overrides Function GetCacheDependency(ByVal virtualPath As String, ByVal virtualPathDependencies As IEnumerable, ByVal utcStart As Date) As CacheDependency
      If (IsPathVirtual(virtualPath)) Then

        Dim fullPathDependencies As System.Collections.Specialized.StringCollection
        fullPathDependencies = Nothing

        ' Get the full path to all dependencies.
        For Each virtualDependency As String In virtualPathDependencies
          If fullPathDependencies Is Nothing Then
            fullPathDependencies = New System.Collections.Specialized.StringCollection
          End If

          fullPathDependencies.Add(virtualDependency)
        Next

        If fullPathDependencies Is Nothing Then
          Return Nothing
        End If

        Dim fullPathDependenciesArray As String()
        fullPathDependencies.CopyTo(fullPathDependenciesArray, 0)

        Return New CacheDependency(fullPathDependenciesArray, utcStart)
      Else
        Return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart)
      End If
    End Function
  End Class
End Namespace

Le deuxième exemple est le fichier de données XML utilisé pour remplir l’objet DataSet retourné par l’objet personnalisé VirtualPathProvider . Ces données XML sont utilisées pour illustrer l’utilisation des VirtualPathProviderobjets , VirtualDirectoryet VirtualFile pour récupérer des données à partir de données externes et ne sont pas destinées à représenter un magasin de données de qualité production.

<?xml version="1.0" encoding="utf-8" ?>  
  <resource type="dir"   
    path="/vrDir"   
    parentPath=""   
    content="">  
    <resource type="file"   
      path="/vrDir/Level1FileA.vrf"  
      parentPath="/vrDir"   
      content="This is the content of file Level1FileA.">  
    </resource>  
    <resource type="file"   
      path="/vrDir/Level1FileB.vrf"  
      parentPath="/vrDir"   
      content="This is the content of file Level1FileB.">  
    </resource>  
    <resource type="dir"   
      path="/vrDir/Level2DirA"   
      parentPath="/vrDir"   
      content="">  
    <resource type="file"   
      path="/vrDir/Level2DirA/Level2FileA.vrf"   
      parentPath="/vrDir/Level2DirA"   
      content="This is the content of file Level2FileA.">  
    </resource>  
    <resource type="file"   
      path="/vrDir/Level2DirA/Level2FileB.vrf"  
      parentPath="/vrDir/Level2DirA"   
      content="This is the content of file Level2FileB.">  
    </resource>  
  </resource>  
  <resource type="dir"   
    path="/vrDir/Level2DirB"   
    parentPath="/vrDir"   
    content="">  
    <resource type="file"   
      path="/vrDir/Level2DirB/Level2FileA.vrf"   
      parentPath="/vrDir/Level2DirB"   
      content="This is the content of file Level2FileA.">  
    </resource>  
    <resource type="file"   
      path="/vrDir/Level2DirB/Level2FileB.vrf"  
      parentPath="/vrDir/Level2DirB"   
      content="This is the content of file Level2FileB.">  
    </resource>  
  </resource>  
</resource>  

Le troisième exemple fournit un AppStart objet qui contient une AppInitialize méthode. Cette méthode est appelée lors de l’initialisation d’une application ASP.NET pour effectuer toute initialisation personnalisée requise. Dans ce cas, il inscrit l’objet personnalisé VirtualPathProvider auprès du système de build ASP.NET.

using System.Web.Hosting;

namespace Samples.AspNet.CS
{
  /// <summary>
  ///   Contains the application initialization method
  ///   for the sample application.
  /// </summary>
  public static class AppStart
  {
    public static void AppInitialize()
    {
      SamplePathProvider sampleProvider = new SamplePathProvider();
      HostingEnvironment.RegisterVirtualPathProvider(sampleProvider);
    } 
  }
}

Imports System.Web.Hosting

Namespace Samples.AspNet.VB

  Public Class AppStart

    Public Shared Sub AppInitialize()
      Dim sampleProvider As SamplePathProvider = New SamplePathProvider()
      HostingEnvironment.RegisterVirtualPathProvider(sampleProvider)
    End Sub

  End Class
End Namespace

Le dernier exemple est une page ASP.NET qui contient des liens vers les fichiers virtuels contenus dans le système de fichiers virtuel.


<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>Virtual Path Provider Example</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:HyperLink ID="hyperLink1" runat="server" NavigateUrl="vrDir/Level1FileA.vrf" Text="Level 1, File A" /><br />
    <asp:HyperLink ID="hyperLink2" runat="server" NavigateUrl="vrDir/Level1FileB.vrf" Text="Level 1, File B" /><br />
    <asp:HyperLink ID="hyperLink3" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileA.vrf" Text="Level 2a, File A" /><br />
    <asp:HyperLink ID="hyperLink4" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileB.vrf" Text="Level 2a, File B" /><br />
    <asp:HyperLink ID="hyperLink5" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileA.vrf" Text="Level 2b, File A" /><br />
    <asp:HyperLink ID="hyperLink6" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileB.vrf" Text="Level 2b, File B" /><br />
  </form>
</body>
</html>
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>Virtual Path Provider Example</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:HyperLink ID="hyperLink1" runat="server" NavigateUrl="vrDir/Level1FileA.vrf" Text="Level 1, File A" /><br />
    <asp:HyperLink ID="hyperLink2" runat="server" NavigateUrl="vrDir/Level1FileB.vrf" Text="Level 1, File B" /><br />
    <asp:HyperLink ID="hyperLink3" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileA.vrf" Text="Level 2a, File A" /><br />
    <asp:HyperLink ID="hyperLink4" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileB.vrf" Text="Level 2a, File B" /><br />
    <asp:HyperLink ID="hyperLink5" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileA.vrf" Text="Level 2b, File A" /><br />
    <asp:HyperLink ID="hyperLink6" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileB.vrf" Text="Level 2b, File B" /><br />
  </form>
</body>
</html>

Remarques

La VirtualPathProvider classe fournit un ensemble de méthodes permettant d’implémenter un système de fichiers virtuel pour une application web. Dans un système de fichiers virtuel, les fichiers et les répertoires sont gérés par un magasin de données autre que le système de fichiers fourni par le système d’exploitation du serveur. Par exemple, vous pouvez utiliser un système de fichiers virtuel pour stocker du contenu dans une base de données SQL Server.

Vous pouvez stocker n’importe quel fichier traité à la demande dans un système de fichiers virtuel. notamment :

  • ASP.NET pages, pages maîtres, contrôles utilisateur et autres objets.

  • Pages Web standard avec des extensions telles que .htm et .jpg.

  • Toute extension personnalisée mappée à une BuildProvider instance.

  • Tout thème nommé dans le App_Theme dossier.

Vous ne pouvez pas stocker ASP.NET dossiers d’application ou des fichiers qui génèrent des assemblys au niveau de l’application dans un système de fichiers virtuel. notamment :

  • Fichier Global.asax.

  • Web.config fichiers.

  • Fichiers de données de carte de site utilisés par .XmlSiteMapProvider

  • Répertoires qui contiennent des assemblys d’application ou qui génèrent des assemblys d’application : Bin, App_Code, App_GlobalResources, tout App_LocalResources.

  • Dossier de données d’application, App_Data.

Notes

Si un site Web est précompilé pour le déploiement, le contenu fourni par une VirtualPathProvider instance n’est pas compilé et aucune instance n’est VirtualPathProvider utilisée par le site précompilé.

Inscription d’un VirtualPathProvider

Une instance personnalisée VirtualPathProvider doit être inscrite auprès du système de compilation ASP.NET à l’aide de la HostingEnvironment.RegisterVirtualPathProvider méthode avant qu’une analyse ou une compilation de pages ne soit effectuée par l’application web.

En règle générale, une VirtualPathProvider instance est inscrite dans une AppInitialize méthode définie dans le App_Code répertoire ou pendant l’événement Application_Start dans le Global.asax fichier. Pour obtenir un exemple d’inscription d’une VirtualPathProvider instance dans une AppInitialize méthode, consultez la section Exemple.

Vous pouvez inscrire une VirtualPathProvider instance pendant d’autres événements, mais les pages compilées et mises en cache avant l’inscription de l’instance VirtualPathProvider ne sont pas invalidées, même si la nouvelle VirtualPathProvider instance fournit désormais la source de la page compilée précédemment.

Notes pour les responsables de l’implémentation

Lorsque vous héritez de VirtualPathProvider, vous devez substituer les membres suivants :

Si votre classe personnalisée VirtualPathProvider prend en charge les répertoires dans le système de fichiers virtuel, vous devez remplacer les membres suivants.

  • DirectoryExists(String)

  • GetDirectory(String)

    Remarque : Si votre système de fichiers virtuel contient des thèmes pour le site Web (en créant un répertoire virtuel App_Themes ), votre classe personnalisée VirtualPathProvider doit prendre en charge les répertoires.

    Une classe personnalisée VirtualPathProvider fonctionne avec des classes dérivées des VirtualFile classes et .VirtualDirectory Vous devez implémenter des classes dérivées de ces types pour fournir des informations de fichiers et de répertoires à partir de votre système de fichiers virtuel. Pour obtenir un exemple d’implémentation personnalisée VirtualFile , consultez la section Exemple de la rubrique Vue d’ensemble de la VirtualFile classe. Pour obtenir un exemple d’implémentation personnalisée VirtualDirectory , consultez la section Exemple de la rubrique Vue d’ensemble de la VirtualDirectory classe.

Constructeurs

VirtualPathProvider()

Initialise la classe pour qu'elle soit utilisée par une instance de la classe héritée. Ce constructeur peut être appelé uniquement par une classe héritée.

Propriétés

Previous

Obtient une référence à un objet VirtualPathProvider précédemment inscrit dans le système de compilation.

Méthodes

CombineVirtualPaths(String, String)

Combine un chemin d'accès de base avec un chemin d'accès relatif pour retourner un chemin d'accès complet à une ressource virtuelle.

CreateObjRef(Type)

Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant.

(Hérité de MarshalByRefObject)
DirectoryExists(String)

Obtient une valeur qui indique si un répertoire existe dans le système de fichiers virtuel.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
FileExists(String)

Obtient une valeur qui indique si un fichier existe dans le système de fichiers virtuel.

GetCacheDependency(String, IEnumerable, DateTime)

Crée une dépendance de cache basée sur les chemins d'accès virtuels spécifiés.

GetCacheKey(String)

Retourne une clé de cache à utiliser pour le chemin d'accès virtuel spécifié.

GetDirectory(String)

Obtient un répertoire virtuel à partir du système de fichiers virtuel.

GetFile(String)

Obtient un fichier virtuel à partir du système de fichiers virtuel.

GetFileHash(String, IEnumerable)

Retourne un hachage des chemins d'accès virtuels spécifiés.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetLifetimeService()
Obsolète.

Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance.

(Hérité de MarshalByRefObject)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
Initialize()

Initialise l’instance VirtualPathProvider.

InitializeLifetimeService()

Donne à l'objet VirtualPathProvider une durée de vie infinie en empêchant toute création de bail.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
MemberwiseClone(Boolean)

Crée une copie superficielle de l'objet MarshalByRefObject actuel.

(Hérité de MarshalByRefObject)
OpenFile(String)

Retourne un flux à partir d'un fichier virtuel.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à