【问题标题】:Rerencing a class from a Add-Type'd class gives error从 Add-Type'd 类中重新引用一个类会产生错误
【发布时间】:2012-11-21 17:21:56
【问题描述】:

我有一个 C# 类 (processcontroller.cs)。

在这个类中,我将其他类添加到列表对象中(这些类将在稍后调用)。

我的一个子类如下所示:

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

我定义了我的进程控制器路径,然后像这样设置它的第一个子类:

processController.steps[0] = $Step1Class

我用以下 3 个 PS 命令定义了 $Step1Class

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

但是在上面代码的最后一行我得到一个错误:

当前上下文中不存在名称 ExceptionHandler。

我明白为什么会触发错误,但除了在 Step1 类本身中定义 ExceptionHandler 之外,我还有哪些其他选项?我不想在 Step1.cs 中定义它的原因是因为这意味着我必须为每个其他步骤类重复它。

【问题讨论】:

  • ExceptionHandler 到底是什么?自定义类?该类属于System.ServiceModel.Dispatcher 指令吗?这个没有一个叫做LogException(Exception e)的方法。
  • 对不起,我应该说,ExceptionHandler类是我写的自定义类。

标签: c# powershell exception-handling add-type


【解决方案1】:

我的猜测是 Powershell 没有引用您的自定义类(假设它是自定义类)。 尝试编译它并将其作为程序集加载。

[System.Reflection.Assembly]::LoadFrom("path to assembly")

【讨论】:

  • 你是说我应该创建一个类库项目并在其中定义 ExceptionHandler 吗?到目前为止,我刚刚创建了类并从文件夹中引用它们。
  • 我认为这是一种处理方式。您需要以一种或另一种方式加载 ExceptionHandler 的定义,以便 Powershell 知道它。拥有程序集的好处是,您的 ExceptionHandler 可能拥有的任何其他引用都可以在程序集中被引用,除非它是该程序集之外的引用,也应该被引用。你明白我的意思吗?
  • 如果记忆有用(如果不是,请告诉我),我认为您也可以在 Powershell 脚本中创建一个类。如果您真的不想创建程序集,也许您可​​以在 Powershell 中定义该类。这样,它应该在你的所有“步骤”中定义。
  • 我明白你的意思,但是在创建一个类库并执行类似于你的建议的行之后,我如何根据 DLL 中的类创建对象?我尝试了 $PC = namespace.processcontroller 并没有引发错误,但是当我在 $PC 上运行 Get-Member 时出现错误。
  • 这里有一个网站可以提供帮助:blogs.msdn.com/b/powershell/archive/2009/03/11/…
【解决方案2】:

您需要为您的自定义类使用add-type。 然后在需要它的所有其他类中为您的自定义类添加using 指令 (这与您在 c# 中的操作方式相同)。或者使用add-type

Add-type $script -UsingNamespace PowerShellTests.MycustomExceptionHandlerClass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多