次の方法で共有


ModuleBuilder.DefineDocument メソッド

ソースの文書を定義します。

Public Function DefineDocument( _
   ByVal url As String, _   ByVal language As Guid, _   ByVal languageVendor As Guid, _   ByVal documentType As Guid _) As ISymbolDocumentWriter
[C#]
public ISymbolDocumentWriter DefineDocument(stringurl,Guidlanguage,GuidlanguageVendor,GuiddocumentType);
[C++]
public: ISymbolDocumentWriter* DefineDocument(String* url,Guidlanguage,GuidlanguageVendor,GuiddocumentType);
[JScript]
public function DefineDocument(
   url : String,language : Guid,languageVendor : Guid,documentType : Guid) : ISymbolDocumentWriter;

パラメータ

  • url
    文書の URL。
  • language
    文書の言語を識別するグローバル一意識別子 (GUID: Globally Unique IDentifier)。null でもかまいません。
  • languageVendor
    文書の言語の販売元を識別する GUID。null でもかまいません。
  • documentType
    文書の種類を識別する GUID。null でもかまいません。

戻り値

定義する文書を表す ISymbolDocumentWriter オブジェクト。

例外

例外の種類 条件
ArgumentNullException url が null 参照 (Visual Basic では Nothing) です。
InvalidOperationException このメソッドは、デバッグ モジュールではない動的モジュールに対して呼び出されます。

使用例

[Visual Basic, C#, C++] 次のコード例は、 DefineDocument を使用して、外部のシンボル ドキュメント (この場合は、生の IL ファイル) を動的モジュールに結び付ける方法を示しています。

 
Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Resources
Imports System.Diagnostics.SymbolStore

Namespace ILGenServer

   Public Class CodeGenerator
      Private myModuleBuilder As ModuleBuilder
      Private myAssemblyBuilder As AssemblyBuilder

      Public Sub New()

         ' Get the current application ___domain for the current thread.
         Dim currentDomain As AppDomain = AppDomain.CurrentDomain
         Dim myAssemblyName As New AssemblyName()
         myAssemblyName.Name = "TempAssembly"

         ' Define a dynamic assembly in the current ___domain.
         myAssemblyBuilder = currentDomain.DefineDynamicAssembly(myAssemblyName, _
                                                         AssemblyBuilderAccess.RunAndSave)
         ' Define a dynamic module in "TempAssembly" assembly.
         myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule", "Resource.mod", True)

         ' Define a document for source.on 'TempModule' module.
         Dim myDocument As ISymbolDocumentWriter = myModuleBuilder.DefineDocument("RTAsm.il", _
                     SymDocumentType.Text, SymLanguageType.ILAssembly, SymLanguageVendor.Microsoft)
         Console.WriteLine("The object representing the defined document is:" + _
                                                             CObj(myDocument).ToString())

      End Sub 'New
   End Class 'CodeGenerator

   Public Class CallerClass

      Public Shared Sub Main()
         Dim myGenerator As New CodeGenerator()
      End Sub 'Main
   End Class 'CallerClass
End Namespace 'ILGenServer

[C#] 
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Resources;
using System.Diagnostics.SymbolStore;

namespace ILGenServer
{
   public class CodeGenerator
   {
      ModuleBuilder myModuleBuilder ;
      AssemblyBuilder myAssemblyBuilder ;

      public CodeGenerator()
      {

         // Get the current application ___domain for the current thread.
         AppDomain currentDomain = AppDomain.CurrentDomain;
         AssemblyName myAssemblyName = new AssemblyName();
         myAssemblyName.Name = "TempAssembly";

         // Define a dynamic assembly in the current ___domain.
         myAssemblyBuilder =
            currentDomain.DefineDynamicAssembly
                        (myAssemblyName, AssemblyBuilderAccess.RunAndSave);
         // Define a dynamic module in "TempAssembly" assembly.
         myModuleBuilder =
            myAssemblyBuilder.DefineDynamicModule("TempModule","Resource.mod",true);

         // Define a document for source.on 'TempModule' module.
         ISymbolDocumentWriter myDocument =
         myModuleBuilder.DefineDocument("RTAsm.il", SymDocumentType.Text,
                  SymLanguageType.ILAssembly,SymLanguageVendor.Microsoft);

         Console.WriteLine("The object representing the defined document is:"+myDocument);

      }
   }
   public class CallerClass
   {
      public static void Main()
      {
         CodeGenerator myGenerator = new CodeGenerator();
      }
   }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Resources;
using namespace System::Diagnostics::SymbolStore;

public __gc class CodeGenerator {
   ModuleBuilder* myModuleBuilder ;
   AssemblyBuilder* myAssemblyBuilder ;

public:
   CodeGenerator() {

      // Get the current application ___domain for the current thread.
      AppDomain*  currentDomain = AppDomain::CurrentDomain;
      AssemblyName* myAssemblyName = new AssemblyName();
      myAssemblyName->Name = S"TempAssembly";

      // Define a dynamic assembly in the current ___domain.
      myAssemblyBuilder =
         currentDomain->DefineDynamicAssembly
         (myAssemblyName, AssemblyBuilderAccess::RunAndSave);
      // Define a dynamic module in S"TempAssembly" assembly.
      myModuleBuilder =
         myAssemblyBuilder->DefineDynamicModule(S"TempModule", S"Resource.mod", true);

      // Define a document for source.on 'TempModule' module.
      ISymbolDocumentWriter* myDocument =
         myModuleBuilder->DefineDocument(S"RTAsm.il", SymDocumentType::Text,
         SymLanguageType::ILAssembly, SymLanguageVendor::Microsoft);

      Console::WriteLine(S"The object representing the defined document is: {0}", myDocument);

   }
};

int main() {
   CodeGenerator* myGenerator = new CodeGenerator();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

ModuleBuilder クラス | ModuleBuilder メンバ | System.Reflection.Emit 名前空間