1

I have one C# class (processcontroller.cs).

In this class I add other classes to a list object (these classes will be invoked later).

One of my sub classes looks like this:

namespace PowerShellTests
{
    public class Step1
    {
        public void Initialize()
        {
            try
            {
                File.Open("filethatdoesnotexist.txt", FileMode.OpenOrCreate);
            }
            catch (Exception exc)
            {
                ExceptionHandler.LogException(exc);
            }
        }
    }
}

I define my process controller path and then set it's first sub class like so:

processController.steps[0] = $Step1Class

I define $Step1Class with the following 3 PS commands

$script = [io.file]::readalltext('step1.cs')
add-type $script -lang csharpversion3
$Step1Class = New-Object Step1

However on the last line of the above code I get an error:

The name ExceptionHandler does not exist in the current context.

I understand why the error is firing, but other than having ExceptionHandler defined in the Step1 class itself what other options do I have? The reason I do not want to have it defined in Step1.cs is because that will mean I have to repeat it for every other step class.

4

2 に答える 2

0

add-typeカスタムクラスに使用する必要があります。using次に、カスタム クラスのディレクティブを、それを必要とする他のすべてのクラスに追加します (これは、C# で行うのと同じ方法です)。または add-type一緒に使う

Add-type $script -UsingNamespace PowerShellTests.MycustomExceptionHandlerClass
于 2012-12-04T08:33:41.553 に答える
0

私の推測では、Powershell にはカスタム クラスへの参照がありません (それがカスタム クラスである場合)。コンパイルして、アセンブリとしてロードしてみてください。

[System.Reflection.Assembly]::LoadFrom("path to assembly")
于 2012-12-04T07:58:06.860 に答える