在Powershell cmdlet中公开一组相关函数时,是否可以共享属性名称和摘要帮助,以便在程序集中跨cmdlet对这些函数进行规范化处理?是否可以在c#中的Powershell cmdlet之间共享属性和注释?
我知道这可以通过派生类来完成,但是当有多个具有不同属性的cmdlet可以共享时,这种解决方案充其量是尴尬的。
这是一个非常简单的例子。我想分享属性“名称”和所有相关的评论,以便它们在我们正在制作的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包含共享评论的想法。不想得到的理由是可以干净地做。如果小命令A使用P1,P2,而小命令B使用P2,P3和小命令C使用P1,P3,则无法根据需要派生和共享P1,P2,P3。 我也意识到我的共享这些属性的想法可能不是有根据的。只要发生了一些变化,更新N个地方就成了一件麻烦事,我肯定会讨厌拷贝和粘贴代码。 – pennyowe
哦,那你是对的!我只是认为他们有很多共享属性。我认为唯一的方法就是通过include(但只对评论可行)。有一天(也许......)我们将有多重继承... –