VirtualPathProvider Classe

Définition

Fournit un ensemble 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 d’informations stockées dans un DataSet objet. L’exemple de code fonctionne avec les exemples de code pour les VirtualFile classes et VirtualDirectory fournir des ressources virtuelles à partir d’un magasin de données chargé dans un DataSet objet.

Cet exemple comporte quatre parties : l’implémentation de classe VirtualPathProvider, un fichier de données XML utilisé pour remplir l’objet DataSet, un objet AppStart qui contient une méthode AppInitialize utilisée pour inscrire la classe VirtualPathProvider avec le 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 dans le répertoire de l’application App_Code .

  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 dans le répertoire de l’application App_Code .

  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 dans le répertoire de l’application App_Code .

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

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

  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 les méthodes 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 les méthodes 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 classes et VirtualFile les VirtualDirectory classes 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 VirtualPathProviderdonnées , VirtualDirectoryet VirtualFile les objets pour récupérer des données à partir de données externes et ne sont pas destinés à représenter un magasin de données de qualité de 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 une initialisation personnalisée requise. Dans ce cas, il inscrit l’objet VirtualPathProvider personnalisé auprès du système de génération 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 virtuels.


<%@ 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 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. Cela inclut les éléments suivants :

  • 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 ou fichiers d’application qui génèrent des assemblys au niveau de l’application dans un système de fichiers virtuel. Cela inclut les éléments suivants :

  • Fichier Global.asax.

  • fichiers Web.config.

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

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

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

Note

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 VirtualPathProvider personnalisée doit être inscrite auprès du système de compilation ASP.NET à l’aide de la méthode HostingEnvironment.RegisterVirtualPathProvider avant l’analyse ou la compilation des pages 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 seront pas invalidées, même si la nouvelle VirtualPathProvider instance fournirait 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 remplacer 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)

    Note: If your virtual file system will contain themes for the Web site (by creating a virtual <code data-dev-comment-type="c">App_Themes</code> directory), your custom <xref data-throw-if-not-resolved="true" uid="System.Web.Hosting.VirtualPathProvider"></xref> class must support directories.
    

    Une classe personnalisée VirtualPathProvider fonctionne avec des classes dérivées des VirtualFile classes et VirtualDirectory des classes. Vous devez implémenter des classes dérivées de ces types pour fournir des informations de fichier et de répertoire à 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

Nom Description
VirtualPathProvider()

Initialise la classe à utiliser par une instance de classe héritée. Ce constructeur peut être appelé uniquement par une classe héritée.

Propriétés

Nom Description
Previous

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

Méthodes

Nom Description
CombineVirtualPaths(String, String)

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

CreateObjRef(Type)

Crée un objet qui contient toutes les informations pertinentes requises pour générer un proxy utilisé pour 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 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 virtuels spécifiés.

GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetLifetimeService()

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

(Hérité de MarshalByRefObject)
GetType()

Obtient la 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 la création d’un bail.

MemberwiseClone()

Crée une copie superficielle du Objectactuel.

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

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

(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 à