gpt4 book ai didi

c# - 在 powershell 类中使用 dotnet 接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:27 25 4
gpt4 key购买 nike

我想在我的 powershell 中使用我的自定义 .net 库中的接口(interface),但我总是遇到这个错误:

class Logger : Systems.SysBiz.BaseTransversal.ILoggerBl
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unable to find type [Systems.SysBiz.BaseTransversal.ILoggerBl].

如果我使用来自系统命名空间的 IComparable 接口(interface),它工作正常。

[System.Reflection.Assembly]::LoadFile('MyPath\BaseTransversal.dll')

class Logger : Systems.SysBiz.BaseTransversal.ILoggerBl
{

[bool] $SendMailException = $false;

Logger()
{

}

[void] LogFatal([string] $message, [object[]] $args)
{
Write-Host $message;
}

[void] LogException([System.Exception] $ex, [string] $message, [object[]] $args)
{
Write-Host $this.FormatException($ex);
}

[void] LogError([string] $message, [object[]] $args)
{
Write-Host $message;
}

[void] LogWarning([string] $message, [object[]] $args)
{
Write-Host $message;
}

[void] LogInfo([string] $message, [object[]] $args)
{
Write-Host $message;
}

[void] LogTrace([string] $message, [object[]] $args)
{
Write-Host $message;
}

[void] LogDebug([string] $message, [object[]] $args)
{
Write-Host $message;
}

[string] FormatException([System.Exception] $ex)
{
if (!$ex)
{
return "";
}

return "<br/><b>" + $ex.Message + "</b><p>" + $ex.StackTrace + "</p><br/>" + $this.FormatException($ex.InnerException);
}
}

这是我的 .net 界面

namespace Systems.SysBiz.BaseTransversal
{
public interface ILoggerBl
{
bool SendMailException { get; }
void LogFatal(string message, params object[] args);
void LogException(Exception ex, string message, params object[] args);

void LogError(string message, params object[] args);

void LogWarning(string message, params object[] args);

void LogInfo(string message, params object[] args);

void LogTrace(string message, params object[] args);

void LogDebug(string message, params object[] args);

string FormatException(Exception ex);
}
}

更新:添加了完整类 powershell 代码我也尝试过在我的 .net 代码中使用一个空接口(interface),但看起来我看不到/使用我的接口(interface),即使它们是公共(public)的。我错过了什么吗

更新 2:添加了确切的错误

最佳答案

我遇到了同样的问题。 PowerShell 类在脚本评估开始之前处理。所以你的第一行在类试图从它继承之前不会运行,所以类型没有定义。一个解决方案是将类和加载移动到两个单独的脚本中。然后在构成入口点的第三个脚本中对它们进行点源。首先加载定义外部类型的脚本。然后加载定义您的类的脚本,这样在第二个脚本开始评估之前导入类型。

# in file typeLoad.ps1
Add-Type -TypeDefinition "
public interface IHaveName {
string Name { get; set; }
}"

# in file classes.ps1
class B : IHaveName {

}

# in file main.ps1
. $PSScriptRoot\typeLoad.ps1
. $PSScriptRoot\classes.ps1

关于c# - 在 powershell 类中使用 dotnet 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53670021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com