2017-07-04 14 views
1

以下のC#スニペットは、PowerShell(.ps1)ファイルに埋め込まれ、System.Management.Automation.RuntimeExceptionを生成します。 "string s"を削除すると例外がなくなります。大文字の "String"を使用しようとしましたが、名前空間 "System.String"とその他のさまざまなアプローチを追加しようとしましたが、引き続き例外が発生しました。これは私にナッツを運転している、なぜこれが起こっているのか理解するのを助けてください。.ps1ファイル内にC#文字列オブジェクトを作成する方法

$code = @" 
public static class foo 
{ 
    public static bool check() 
    { 
    string s; 
    return false; 
    } 
} 

コードはこのように呼び出されます。

try 
{ 
    Add-Type -TypeDefinition $code -Language CSharp 
} 
catch{} // ignore TYPE_ALREADY_EXISTS exception 
$res = [foo]::check(); 

例外の詳細です。

Exception: System.Management.Automation.RuntimeException: unable to find type [foo]. 
TargetObject: foo 
CategoryInfo: InvalidOperation (foo:Typename) [], RuntimeException 
FullyQualifiedErrorId: TypeNotFound 
InvocationInfo: System.Management.Automation.InvocationInfo 
+5

問題を再現できるほどのコードを投稿してください。文字列値 '$ code'を定義すると、あなた自身のクラスがコンパイルされません –

答えて

0
$code = @" 
public static class foo { 
    public static bool check() { 
    string s; 
    return false; 
    } 
} 
"@ 

Add-Type -TypeDefinition $code -Language CSharp 

それはあなたが未使用の変数を宣言することはできません

Warning as Error: The variable 's' is declared but never used

を生成します。

+0

それには簡単な解決策がありますが、OPが何をしているのか分かりません –

+0

うん、知っているよ。だから私はそれをそのまま残した。これはコメントのためには長すぎた。 – Nkosi

+0

あなたの答えは、PowerShellのコンテキストでC#コードをより良く開発する方法を理解するのに役立ちます。ありがとうございました。 – Lars

関連する問題