Powershell cmdlets에서 관련 함수 집합을 표시 할 때 속성 이름 및 요약 도움말을 공유하여 어셈블리에서 이러한 여러 cmdlet을 표준화 할 수 있습니까?C#의 Powershell cmdlet간에 속성 및 설명을 공유 할 수 있습니까?
이 방법은 파생 클래스를 사용하여 수행 할 수 있지만이 솔루션은 다른 속성을 가진 여러 cmdlet을 공유 할 때 가장 좋지 않습니다.
매우 간단한 예입니다. 'Name'속성과 관련된 모든 주석을 공유하여 제작중인 N 개의 cmdlet에서 동일하게 만들었지 만 C#에서이 작업을 수행하는 좋은 방법을 생각할 수는 없습니다. 원칙적으로 모든 공유는 필수 또는 위치와 같은 매개 변수 속성을 지정할 수 있습니다.
namespace FrozCmdlets
{
using System.Management.Automation;
/// <summary>
/// Adds a new froz to the system.
/// </summary>
[Cmdlet(VerbsCommon.Add, "Froz")]
public class AddFroz : Cmdlet
{
/// <summary>
/// The name of the froz.
/// For more information on the froz, see froz help manual.
/// </summary>
[Parameter]
public string Name { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
// Add the froz here
}
}
/// <summary>
/// Removes a froz from the system.
/// </summary>
[Cmdlet(VerbsCommon.Remove, "Froz")]
public class RemoveFroz : Cmdlet
{
/// <summary>
/// The name of the froz.
/// For more information on the froz, see froz help manual.
/// </summary>
[Parameter]
public string Name { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
// Remove the froz here
}
}
}
이유를 분명히 알지 못하는 경우 의견을 공유하는 가장 좋은 방법은 XML 포함 (프레임 워크 소스 코드보기)을 사용하는 것입니다. 코드 외부에 코드 문서를 보관하고 다른 사람이 작성하고 유지 관리 할 수 있으며 필요한 경우 클래스와 어셈블리간에 공유 할 수 있습니다. –
@Adriano XML을 통해 의견을 공유하는 것을 검토해 주셔서 감사합니다. 파생되기를 원하지 않는 추론은 깔끔하게하는 것이 가능하다는 것입니다. cmdlet A가 P1, P2를 사용하는 경우 cmdlet B가 P2를 사용하고 P3 및 cmdlet C가 P1, P3을 사용하면 P1, P2, P3을 원하는대로 파생 및 공유 할 방법이 없습니다. 나는 이러한 속성을 공유하는 것에 대한 내 생각이 잘 정립되지 않을 수도 있음을 알고 있습니다. 뭔가 변경 될 때마다 N 개의 장소를 업데이트하는 번거 로움이되어 왔으며 복사 및 붙여 넣기 코드를 싫어합니다. – pennyowe
아, 그렇습니다! 나는 그들이 많은 공유 속성을 가지고 있다고 생각했습니다. 필자가 생각한 유일한 방법은 include를 사용하는 것입니다 (그러나 주석만으로는 충분합니다). 언젠가 (아마도 ...) 우리는 다중 상속을 가질 것입니다 ... –