次の方法で共有


VBCodeProvider クラス

Visual Basic コード ジェネレータと Visual Basic コード コンパイラのインスタンスへのアクセスを提供します。

名前空間: Microsoft.VisualBasic
アセンブリ: System (system.dll 内)

構文

'宣言
Public Class VBCodeProvider
    Inherits CodeDomProvider
'使用
Dim instance As VBCodeProvider
public class VBCodeProvider : CodeDomProvider
public ref class VBCodeProvider : public CodeDomProvider
public class VBCodeProvider extends CodeDomProvider
public class VBCodeProvider extends CodeDomProvider
適用できません。

解説

このクラスは、Visual Basic ICodeGenerator 実装と Visual Basic ICodeCompiler 実装のインスタンスを取得するために使用できるメソッドを提供します。

メモメモ :

このクラスには、すべてのメンバに適用されるクラス レベルのリンク確認要求と継承確認要求が格納されます。直前の呼び出し元または派生クラスに完全信頼のアクセス許可がない場合、SecurityException がスローされます。セキュリティ要求の詳細については、「リンク確認要求」および「継承確認要求」を参照してください。

使用例

C# または Visual Basic コード プロバイダを使用してソース ファイルをコンパイルする例を次に示します。この例では、入力ファイルの拡張子をチェックし、対応するコンパイル用 CSharpCodeProvider または VBCodeProvider を使用します。入力ファイルは実行可能ファイルにコンパイルされます。コンパイル エラーはすべてコンソールに表示されます。

Public Shared Function CompileExecutable(sourceName As String) As Boolean
    Dim sourceFile As FileInfo = New FileInfo(sourceName)
    Dim provider As CodeDomProvider = Nothing
    Dim compileOk As Boolean = False

    ' Select the code provider based on the input file extension.
    If sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".CS"

        provider = CodeDomProvider.CreateProvider("CSharp")

    ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB"

        provider = CodeDomProvider.CreateProvider("VisualBasic")

    Else
        Console.WriteLine("Source file must have a .cs or .vb extension")
    End If

    If Not provider Is Nothing

        ' Format the executable file name.
        ' Build the output assembly path using the current directory
        ' and <source>_cs.exe or <source>_vb.exe.

        Dim exeName As String = String.Format("{0}\{1}.exe", _
            System.Environment.CurrentDirectory, _
            sourceFile.Name.Replace(".", "_"))

        Dim cp As CompilerParameters = new CompilerParameters()

        ' Generate an executable instead of 
        ' a class library.
        cp.GenerateExecutable = True

        ' Specify the assembly file name to generate.
        cp.OutputAssembly = exeName
    
        ' Save the assembly as a physical file.
        cp.GenerateInMemory = False
    
        ' Set whether to treat all warnings as errors.
        cp.TreatWarningsAsErrors = False
 
        ' Invoke compilation of the source file.
        Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
            sourceName)
    
        If cr.Errors.Count > 0
            ' Display compilation errors.
            Console.WriteLine("Errors building {0} into {1}", _
                sourceName, cr.PathToAssembly)

            Dim ce As CompilerError
            For Each ce In cr.Errors
                Console.WriteLine("  {0}", ce.ToString())
                Console.WriteLine()
            Next ce
        Else
            ' Display a successful compilation message.
            Console.WriteLine("Source {0} built into {1} successfully.", _
                sourceName, cr.PathToAssembly)
        End If
      
        ' Return the results of the compilation.
        If cr.Errors.Count > 0
            compileOk = False
        Else 
            compileOk = True
        End If
    End If
    return compileOk

End Function
public static bool CompileExecutable(String sourceName)
{
    FileInfo sourceFile = new FileInfo(sourceName);
    CodeDomProvider provider = null;
    bool compileOk = false;

    // Select the code provider based on the input file extension.
    if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
    {
        provider = CodeDomProvider.CreateProvider("CSharp");
    }
    else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
    {
        provider = CodeDomProvider.CreateProvider("VisualBasic");
    }
    else 
    {
        Console.WriteLine("Source file must have a .cs or .vb extension");
    }

    if (provider != null)
    {

        // Format the executable file name.
        // Build the output assembly path using the current directory
        // and <source>_cs.exe or <source>_vb.exe.
 
        String exeName = String.Format(@"{0}\{1}.exe", 
            System.Environment.CurrentDirectory, 
            sourceFile.Name.Replace(".", "_"));

        CompilerParameters cp = new CompilerParameters();

        // Generate an executable instead of 
        // a class library.
        cp.GenerateExecutable = true;

        // Specify the assembly file name to generate.
        cp.OutputAssembly = exeName;
    
        // Save the assembly as a physical file.
        cp.GenerateInMemory = false;
    
        // Set whether to treat all warnings as errors.
        cp.TreatWarningsAsErrors = false;
 
        // Invoke compilation of the source file.
        CompilerResults cr = provider.CompileAssemblyFromFile(cp, 
            sourceName);
    
        if(cr.Errors.Count > 0)
        {
            // Display compilation errors.
            Console.WriteLine("Errors building {0} into {1}",  
                sourceName, cr.PathToAssembly);
            foreach(CompilerError ce in cr.Errors)
            {
                Console.WriteLine("  {0}", ce.ToString());
                Console.WriteLine();
            }
        }
        else
        {
            // Display a successful compilation message.
            Console.WriteLine("Source {0} built into {1} successfully.",
                sourceName, cr.PathToAssembly);
        }
      
        // Return the results of the compilation.
        if (cr.Errors.Count > 0)
        {
            compileOk = false;
        }
        else 
        {
            compileOk = true;
        }
    }
    return compileOk;
}

.NET Framework のセキュリティ

  • SecurityAction.LinkDemand  (直前の呼び出し元に対して完全な信頼がある場合)。このクラスは、部分的に信頼されているコードから使用することはできません。
  • SecurityAction.InheritanceDemand  (継承側に対して完全な信頼がある場合)。このクラスは、部分的に信頼されているコードで継承することはできません。

継承階層

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.CodeDom.Compiler.CodeDomProvider
        Microsoft.VisualBasic.VBCodeProvider

スレッド セーフ

この型の public static (Visual Basicでは共有) メンバはすべて,スレッド セーフです。インスタンス メンバの場合は,スレッド セーフであるとは限りません。

プラットフォーム

Windows 98,Windows Server 2000 SP4,Windows CE,Windows Millennium Edition,Windows Mobile for Pocket PC,Windows Mobile for Smartphone,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP Starter Edition

Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。

バージョン情報

.NET Framework

サポート対象 : 3.0,2.0,1.1,1.0

参照

関連項目

VBCodeProvider メンバ
Microsoft.VisualBasic 名前空間
ICodeGenerator
ICodeCompiler
System.CodeDom
System.CodeDom.Compiler