Add-Type
Microsoft .NET Framework 유형(클래스)을 Windows PowerShell 세션에 추가합니다.
구문
Add-Type -AssemblyName <string[]> [-IgnoreWarnings] [-PassThru] [<CommonParameters>]
Add-Type [-Name] <string> [-MemberDefinition] <string[]> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-언어 {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-Namespace <string>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-UsingNamespace <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]
Add-Type [-Path] <string[]> [-CompilerParameters <CompilerParameters>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]
Add-Type [-TypeDefinition] <string> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-언어 {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]
설명
Add-Type cmdlet을 사용하면 Windows PowerShell 세션에서 .NET Framework 클래스를 정의할 수 있습니다. 그런 다음 New-Object cmdlet을 사용하여 개체를 인스턴스화하고 다른 .NET Framework 개체를 사용하는 경우와 마찬가지로 이 개체를 사용할 수 있습니다. Windows PowerShell 프로필에 Add-Type 명령을 추가하면 모든 Windows PowerShell 세션에서 해당 클래스를 사용할 수 있습니다.
기존 어셈블리 또는 소스 코드 파일을 지정하여 유형을 지정할 수도 있고 인라인 또는 변수에 저장된 소스 코드를 지정할 수도 있습니다. 메서드만 지정해도 Add-Type은 해당 클래스를 정의하고 생성합니다. 이 기능을 사용하여 Windows PowerShell의 관리되지 않는 함수에 대한 플랫폼 호출(P/Invoke)을 수행할 수 있습니다. 소스 코드를 지정할 경우 Add-Type은 지정된 소스 코드를 컴파일하여 새 .NET Framework 유형이 포함된 인-메모리 어셈블리를 생성합니다.
Add-Type의 매개 변수를 사용하여 대체 언어 및 컴파일러(기본값은 CSharp), 컴파일러 옵션, 어셈블리 종속성, 클래스 네임스페이스, 해당 유형의 이름 및 결과 어셈블리를 지정할 수 있습니다.
매개 변수
-AssemblyName <string[]>
해당 유형을 포함하는 어셈블리 이름을 지정합니다. Add-Type은 지정된 어셈블리에서 유형을 가져옵니다. 어셈블리 이름을 사용하여 유형을 만드는 경우 이 매개 변수는 필수입니다.
어셈블리의 전체 이름 또는 간단한 이름("부분 이름"이라고도 함)을 입력합니다. 어셈블리 이름에는 와일드카드 문자를 사용할 수 있습니다. 간단한 이름이나 부분 이름을 입력하면 Add-Type은 이를 전체 이름으로 확인한 다음 전체 이름을 사용하여 어셈블리를 로드합니다.
이 매개 변수는 경로 또는 파일 이름을 사용하지 않습니다. 어셈블리 DLL(동적 연결 라이브러리) 파일에 대한 경로를 입력하려면 Path 매개 변수를 사용하십시오.
필수 여부 |
true |
위치 |
named |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
true |
-CodeDomProvider <CodeDomProvider>
코드 생성기 또는 컴파일러를 지정합니다. Add-Type은 지정된 컴파일러를 사용하여 소스 코드를 컴파일합니다. 기본값은 CSharp 컴파일러입니다. Language 매개 변수를 사용하여 지정할 수 없는 언어를 사용하려면 이 매개 변수를 사용하십시오. 지정하는 CodeDomProvider는 소스 코드에서 어셈블리를 생성할 수 있어야 합니다.
필수 여부 |
false |
위치 |
named |
기본값 |
CSharp 컴파일러 |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-CompilerParameters <CompilerParameters>
소스 코드 컴파일러에 대한 옵션을 지정합니다. 이 옵션은 수정 없이 컴파일러로 보내집니다.
이 매개 변수를 사용하여 실행 파일을 생성하거나, 리소스를 포함하거나, "/unsafe" 옵션과 같은 명령줄 옵션을 설정하도록 컴파일러에 지시할 수 있습니다. 이 매개 변수는 CompilerParameters 클래스(System.CodeDom.Compiler.CompilerParameters)를 구현합니다.
필수 여부 |
false |
위치 |
named |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-IgnoreWarnings
컴파일러 경고를 무시합니다. 이 매개 변수를 사용하여 Add-Type이 컴파일러 경고를 오류로 처리하지 않도록 지정할 수 있습니다.
필수 여부 |
false |
위치 |
named |
기본값 |
False |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-언어 <Language>
소스 코드에 사용할 언어를 지정합니다. Add-Type은 이 언어를 사용하여 올바른 코드 컴파일러를 선택합니다.
유효한 값은 "CSharp", "CSharpVersion3", "VisualBasic" 및 "JScript"입니다. 기본값은 "CSharp"입니다.
필수 여부 |
false |
위치 |
named |
기본값 |
CSharp |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-MemberDefinition <string[]>
클래스의 새 속성 또는 메서드를 지정합니다. Add-Type은 해당 속성 또는 메서드를 지원하는 데 필요한 템플릿 코드를 생성합니다.
이 기능을 사용하여 Windows PowerShell의 관리되지 않는 함수에 대한 플랫폼 호출(P/Invoke)을 수행할 수 있습니다. 자세한 내용은 예를 참조하십시오.
필수 여부 |
true |
위치 |
2 |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-Name <string>
만들 클래스의 이름을 지정합니다. 멤버 정의에서 유형을 생성하는 경우 이 매개 변수는 필수입니다.
유형 이름 및 네임스페이스는 세션 내부에서 고유해야 합니다. 유형을 언로드하거나 변경할 수 없습니다. 유형에 대한 코드를 변경해야 하는 경우 해당 이름을 변경하거나 새 Windows PowerShell 세션을 시작해야 합니다. 그렇지 않으면 명령이 실패합니다.
필수 여부 |
true |
위치 |
1 |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-Namespace <string>
유형의 네임스페이스를 지정합니다.
이 매개 변수가 명령에 포함되어 있지 않으면 유형은 Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes 네임스페이스에 만들어집니다. 이 매개 변수가 명령에 빈 문자열 값 또는 $null 값으로 지정된 경우 유형은 전역 네임스페이스에 생성됩니다.
필수 여부 |
false |
위치 |
named |
기본값 |
Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-OutputAssembly <string>
어셈블리에 대한 DLL 파일을 해당 위치에 지정된 이름으로 생성합니다. 경로(선택 사항)와 파일 이름을 입력하십시오. 와일드카드 문자를 사용할 수 있습니다. Add-Type은 기본적으로 어셈블리를 메모리에만 생성합니다.
필수 여부 |
false |
위치 |
named |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
true |
-OutputType <OutputAssemblyType>
출력 어셈블리의 출력 유형을 지정합니다. 유효한 값은 Library, ConsoleApplication 및 WindowsApplication입니다.
기본적으로 출력 유형은 지정되지 않습니다.
이 매개 변수는 명령에서 출력 어셈블리를 지정한 경우에만 사용할 수 있습니다.
필수 여부 |
false |
위치 |
named |
기본값 |
없음 |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-PassThru
추가된 유형을 나타내는 System.Runtime 개체를 반환합니다. 기본적으로 이 cmdlet에서는 출력을 생성하지 않습니다.
필수 여부 |
false |
위치 |
named |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-Path <string[]>
해당 유형이 포함된 소스 코드 파일 또는 어셈블리 DLL 파일의 경로를 지정합니다.
소스 코드 파일을 전송하면 Add-Type은 파일의 코드를 컴파일하고 해당 유형의 인-메모리 어셈블리를 만듭니다. Path 값에 지정된 파일 이름 확장명에 따라 Add-Type이 사용하는 컴파일러가 결정됩니다.
어셈블리 파일을 전송하면 Add-Type은 해당 어셈블리에서 유형을 가져옵니다. 인-메모리 어셈블리 또는 전역 어셈블리 캐시를 지정하려면 AssemblyName 매개 변수를 사용하십시오.
필수 여부 |
true |
위치 |
1 |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-ReferencedAssemblies <string[]>
유형이 종속된 어셈블리를 지정합니다. 기본적으로 Add-Type은 System.dll 및 System.Management.Automation.dll을 참조합니다. 이 매개 변수를 사용하여 지정하는 어셈블리는 기본 어셈블리에 추가하여 참조됩니다.
필수 여부 |
false |
위치 |
named |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-TypeDefinition <string>
유형 정의가 포함된 소스 코드를 지정합니다. 소스 코드를 문자열 또는 here-string으로 입력하거나 소스 코드가 포함된 변수를 입력하십시오. here-string에 대한 자세한 내용은 about_Quoting_Rules를 참조하십시오.
유형 정의에 네임스페이스 선언을 포함하십시오. 네임스페이스 선언을 누락하면 유형 이름이 다른 유형 또는 다른 유형의 바로 가기 이름과 같아져서 해당 유형을 덮어쓰는 일이 발생할 수 있습니다. 예를 들어 "Exception"이라는 유형을 정의하는 경우 System.Exception에 대한 바로 가기로 "Exception"을 사용하는 스크립트가 실패합니다.
필수 여부 |
true |
위치 |
1 |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-UsingNamespace <string[]>
클래스에 필요한 다른 네임스페이스를 지정합니다. 이 매개 변수는 C#의 Using 키워드와 매우 유사합니다.
기본적으로 Add-Type은 System 네임스페이스를 참조합니다. MemberDefinition 매개 변수가 사용되는 경우 Add-Type은 기본적으로 System.Runtime.InteropServices 네임스페이스도 참조합니다. UsingNamespace 매개 변수를 사용하여 추가하는 네임스페이스는 기본 네임스페이스에 추가하여 참조됩니다.
필수 여부 |
false |
위치 |
named |
기본값 |
|
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
<CommonParameters>
이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_commonparameters.
입력 및 출력
입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.
입력 |
없음 Add-Type으로 개체를 파이프할 수 없습니다. |
출력 |
없음 또는 System.RuntimeType PassThru 매개 변수를 사용하는 경우 Add-Type은 새 유형을 나타내는 System.RuntimeType 개체를 반환합니다. 그렇지 않으면 아무 출력도 생성하지 않습니다. |
참고
추가한 유형은 현재 세션에서만 존재합니다. 해당 유형을 모든 세션에서 사용하려면 Windows PowerShell 프로필에 추가하십시오. 프로필에 대한 자세한 내용은 about_Profiles를 참조하십시오.
유형 이름(및 네임스페이스)은 세션 내부에서 고유해야 합니다. 유형을 언로드하거나 변경할 수 없습니다. 유형에 대한 코드를 변경해야 하는 경우 해당 이름을 변경하거나 새 Windows PowerShell 세션을 시작해야 합니다. 그렇지 않으면 명령이 실패합니다.
IronPython 및 JSharp와 같은 일부 언어에 대한 CodeDomProvider 클래스는 출력을 생성하지 않습니다. 따라서 이러한 언어로 작성된 유형은 Add-Type에 사용할 수 없습니다.
이 cmdlet은 CodeDomProvider 클래스에 기반을 두고 있습니다. 이 클래스에 대한 자세한 내용은 Microsoft .NET Framework SDK를 참조하십시오.
예 1
C:\PS>$source = @"
public class BasicTest
{
public static int Add(int a, int b)
{
return (a + b);
}
public int Multiply(int a, int b)
{
return (a * b);
}
}
"@
C:\PS> Add-Type -TypeDefinition $source
C:\PS> [BasicTest]::Add(4, 3)
C:\PS> $basicTestObject = New-Object BasicTest
C:\PS> $basicTestObject.Multiply(5, 2)
설명
-----------
이들 명령은 변수에 저장된 소스 코드를 지정하여 BasicTest 클래스를 세션에 추가합니다. 해당 유형에는 Add라는 정적 메서드와 Multiply라는 비정적 메서드가 포함되어 있습니다.
첫 번째 명령은 클래스의 소스 코드를 $source 변수에 저장합니다.
두 번째 명령은 Add-Type cmdlet을 사용하여 클래스를 세션에 추가합니다. 인라인 소스 코드를 사용하고 있으므로 이 명령은 TypeDefinition 매개 변수를 사용하여 코드를 $source 변수에 지정합니다.
나머지 명령에서는 새 클래스를 사용합니다.
세 번째 명령은 BasicTest 클래스의 Add 정적 메서드를 호출합니다. 이 명령에서는 이중 콜론 문자(::)를 사용하여 클래스의 정적 멤버를 지정합니다.
네 번째 명령은 New-Object cmdlet을 사용하여 BasicTest 클래스의 인스턴스를 인스턴스화한 다음 새 개체를 $basicTestObject 변수에 저장합니다.
다섯 번째 명령은 $basicTestObject의 Multiply 메서드를 사용합니다.
예 2
C:\PS>[BasicTest] | get-member
C:\PS> [BasicTest] | get-member -static
C:\PS> $basicTestObject | get-member
C:\PS> [BasicTest] | get-member
TypeName: System.RuntimeType
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone()
Equals Method System.Boolean Equals
FindInterfaces Method System.Type[] FindInt
...
C:\PS> [BasicTest] | get-member -static
TypeName: BasicTest
Name MemberType Definition
---- ---------- ----------
Add Method static System.Int32 Add(Int32 a, Int32 b)
Equals Method static System.Boolean Equals(Object objA,
ReferenceEquals Method static System.Boolean ReferenceEquals(Obj
C:\PS> $basicTestObject | get-member
TypeName: BasicTest
Name MemberType Definition
---- ---------- ----------
Equals Method System.Boolean Equals(Object obj)
GetHashCode Method System.Int32 GetHashCode()
GetType Method System.Type GetType()
Multiply Method System.Int32 Multiply(Int32 a, Int32 b)
ToString Method System.String ToString()
설명
-----------
이들 명령은 Get-Member cmdlet을 사용하여 이전 예에서 Add-Type 및 New-Object cmdlet이 만든 개체를 검사합니다.
첫 번째 명령은 Get-Member cmdlet을 사용하여 Add-Type이 세션에 추가한 BasicTest 클래스의 유형 및 멤버를 가져옵니다. Get-Member 명령은 해당 유형이 System.Object 클래스에서 파생된 System.RuntimeType 개체임을 보여 줍니다.
두 번째 명령은 Get-Member의 Static 매개 변수를 사용하여 BasicTest 클래스의 정적 속성 및 메서드를 가져옵니다. 출력에는 Add 메서드가 포함되어 있음이 표시됩니다.
세 번째 명령은 Get-Member를 사용하여 $BasicTestObject 변수에 저장된 개체의 멤버를 가져옵니다. 이 변수는 $BasicType 클래스로 New-Object cmdlet을 사용하여 만든 개체 인스턴스입니다.
출력에서는 $basicTestObject 변수의 값이 BasicTest 클래스의 인스턴스이고 Multiply라는 멤버를 포함하고 있음을 보여 줍니다.
예 3
C:\PS>$accType = add-type -assemblyname accessib* -passthru
설명
-----------
이 명령은 Accessibility 어셈블리의 클래스를 현재 세션에 추가합니다. 이 명령은 AssemblyName 매개 변수를 사용하여 어셈블리의 이름을 지정합니다. 와일드카드 문자를 사용하면 이름이나 철자를 잘 모르는 경우에도 올바른 어셈블리를 가져올 수 있습니다.
이 명령은 PassThru 매개 변수를 사용하여 세션에 추가된 클래스를 나타내는 개체를 생성하고 이 개체를 $accType 변수에 저장합니다.
예 4
C:\PS>add-type -path c:\ps-test\Hello.vb
[VBFromFile]::SayHello(", World")
# From Hello.vb
Public Class VBFromFile
Public Shared Function SayHello(sourceName As String) As String
Dim myValue As String = "Hello"
return myValue + sourceName
End Function
End Class
C:\PS> [VBFromFile]::SayHello(", World")
Hello, World
설명
-----------
이 예에서는 Add-Type cmdlet을 사용하여 Hello.vb 파일에 정의된 VBFromFile 클래스를 현재 세션에 추가합니다. Hello.vb 파일의 텍스트가 명령 출력에 표시됩니다.
첫 번째 명령은 Add-Type cmdlet을 사용하여 Hello.vb 파일에 정의된 유형을 현재 세션에 추가합니다. 이 명령은 path 매개 변수를 사용하여 원본 파일을 지정합니다.
두 번째 명령은 VBFromFile 클래스의 정적 메서드로 SayHello 함수를 호출합니다.
예 5
C:\PS>$signature = @"
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@
$showWindowAsync = Add-Type -memberDefinition $signature -name "Win32ShowWindowAsync" -namespace Win32Functions -passThru
# Minimize the Windows PowerShell console
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 2)
# Restore it
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 4)
설명
-----------
이 예의 명령은 Windows PowerShell에서 기본 Windows API를 호출하는 방법을 보여 줍니다. Add-Type은 플랫폼 호출(P/Invoke) 메커니즘을 사용하여 Windows PowerShell에서 User32.dll의 함수를 호출합니다.
첫 번째 명령은 ShowWindowAsync 함수의 C# 시그니처를 $signature 변수에 저장합니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=143643)의 "ShowWindowAsync Function(ShowWindowAsync 함수)"을 참조하십시오. 결과 메서드를 Windows PowerShell 세션에서 볼 수 있도록 표준 시그니처에 "public" 키워드가 추가되었습니다.
두 번째 명령은 Add-Type cmdlet을 사용하여 Add-Type이 만드는 클래스의 정적 메서드로 ShowWindowAsync 함수를 Windows PowerShell 세션에 추가합니다. 이 명령은 MemberDefinition 매개 변수를 사용하여 $signature 변수에 저장된 메서드 정의를 지정합니다.
이 명령은 Name 및 Namespace 매개 변수를 사용하여 클래스의 이름 및 네임스페이스를 지정하고, PassThru 매개 변수를 사용하여 유형을 나타내는 개체를 생성한 다음 이 개체를 $showWindowAsync 변수에 저장합니다.
세 번째 및 네 번째 명령은 새 ShowWindowAsync 정적 메서드를 사용합니다. 이 메서드는 창 핸들과 창 표시 방법을 지정하는 정수를 매개 변수로 사용합니다.
세 번째 명령은 ShowWindowAsync를 호출합니다. 이 명령은 $pid 자동 변수와 함께 Get-Process cmdlet을 사용하여 현재 Windows PowerShell 세션을 호스팅하는 프로세스를 가져옵니다. 그런 다음 현재 프로세스의 MainWindowHandle 속성 및 SW_MINIMIZE 값을 나타내는 "2"를 사용합니다.
창을 복원하기 위해 네 번째 명령은 창 위치로 SW_RESTORE 값을 나타내는 "4"를 사용합니다. SW_MAXIMIZE는 3입니다.
예 6
C:\PS>Add-Type -MemberDefinition $jsMethod -Name "PrintInfo" -Language JScript
설명
-----------
이 명령은 Add-Type cmdlet을 사용하여 인라인 JScript 코드의 메서드를 Windows PowerShell 세션에 추가합니다. 이 명령은 MemberDefinition 매개 변수를 사용하여 $jsMethod 변수에 저장된 소스 코드를 전송하며, Name 변수를 사용하여 Add-Type이 메서드에 대해 만드는 클래스 이름을 지정하고 Language 매개 변수를 사용하여 JScript 언어를 지정합니다.
예 7
C:\PS>Add-Type -Path FSharp.Compiler.CodeDom.dll
C:\PS> Add-Type -Path FSharp.Compiler.CodeDom.dll
C:\PS> $provider = New-Object Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider
C:\PS> $fSharpCode = @"
let rec loop n =
if n <= 0 then () else begin
print_endline (string_of_int n);
loop (n-1)
end
"@
C:\PS> $fsharpType = Add-Type -TypeDefinition $fSharpCode -CodeDomProvider $provider -PassThru | where { $_.IsPublic }
C:\PS> $fsharpType::loop(4)
4
3
2
1
설명
-----------
이 예에서는 Add-Type cmdlet을 사용하여 FSharp 코드 컴파일러를 Windows PowerShell 세션에 추가하는 방법을 보여 줍니다. Windows PowerShell에서 이 예를 실행하려면 FSharp 언어와 함께 설치되는 FSharp.Compiler.CodeDom.dll이 있어야 합니다.
예의 첫 번째 명령은 Add-Type cmdlet을 Path 매개 변수와 함께 사용하여 어셈블리를 지정합니다. Add-Type은 어셈블리의 유형을 가져옵니다.
두 번째 명령은 New-Object cmdlet을 사용하여 FSharp 코드 공급자의 인스턴스를 만든 다음 그 결과를 $provider 변수에 저장합니다.
세 번째 명령은 Loop 메서드를 정의하는 FSharp 코드를 $FSharpCode 변수에 저장합니다.
네 번째 명령은 Add-Type cmdlet을 사용하여 $fSharpCode에 정의된 public 유형을 $fSharpType 변수에 저장합니다. TypeDefinition 매개 변수는 해당 유형을 정의하는 소스 코드를 지정합니다. CodeDomProvider 매개 변수는 소스 코드 컴파일러를 지정합니다.
PassThru 매개 변수는 해당 유형을 나타내는 Runtime 개체를 반환하도록 Add-Type에 지시하고 파이프라인 연산자(|)는 해당 Runtime 개체를 public 유형만 반환하는 Where-Object cmdlet으로 보냅니다. Where-Object 필터는 FSharp 공급자가 결과로 생성되는 public 유형을 지원하기 위해 public이 아닌 유형을 생성하기 때문에 사용됩니다.
다섯 번째 명령은 $fSharpType 변수에 저장된 유형의 정적 메서드로 Loop 메서드를 호출합니다.