首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将作为字符串数组的参数传递给Cake脚本?

如何将作为字符串数组的参数传递给Cake脚本?
EN

Stack Overflow用户
提问于 2016-03-01 15:35:51
回答 1查看 2.7K关注 0票数 4

我想要一个Argument<IEnumerable<string>> (或者string[],或者其他什么--一个可迭代的字符串列表)到我的Cake脚本中,但是我想不出如何将它从build.ps1传递到cake.exe

到目前为止,这就是我所拥有的:

In build.ps1:

代码语言:javascript
复制
param(
    # ...
    [ValidateSet("Bar", "Baz")]
    [string[]]$Foo
)

# ...

$fooArg = If ($Foo.Count -gt 0) {"-foo=`(`"{0}`"`)" -f [string]::Join("`",`", $Foo)} Else {""}
Invoke-Expression "$CAKE_EXE ... $fooArg"

In build.cake:

代码语言:javascript
复制
var baz = Argument<IEnumerable<string>>("foo", new string[0]);

但是,当我执行此操作时,会得到以下错误:

指定了多个构建脚本。 找不到要执行的生成脚本。 第一个参数必须是构建脚本的路径, 或者构建脚本应该遵循默认的脚本名称约定。 用法: Cake.exe build-script -showdescription .. 示例: Cake.exe示例: Cake.exe build.cake -verbosity=quiet示例: Cake.exe build.cake -showdescription 选项:-verbosity=value指定要显示的信息量。(安静,最小,正常,冗长,诊断) -showdescription显示了关于任务的描述。-dryrun执行一次试运行。-version显示版本信息。-help显示使用信息。-experimental使用罗斯林脚本引擎的夜间构建。

正确的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-03-01 22:43:17

解决方案#1 (简单):

您可以简单地通过接受参数作为字符串并拆分它来解决这个问题:

代码语言:javascript
复制
var foo = Argument("foo", string.Empty).Split(',');

解决方案#2 (复杂):

您还可以通过将字符串数组包装在自定义类型中并为该类型实现TypeConverter来解决这一问题。包装器和类型转换器都必须驻留在.NET程序集中,该程序集将通过#r#addin指令加载。

代码语言:javascript
复制
[TypeConverter(typeof(StringArrayConverter))]
public class StringArray
{
    public string[] Items { get; }
}

public class StringArrayConverter : TypeConverter
{
  // Implementation here :)
}

然后,您将像往常一样在Argument类型中使用StringArray别名。

代码语言:javascript
复制
var foo = Argument<StringArray>("foo", null);

在我看来,这个选项对于获取字符串数组来说有点复杂,所以您可能希望在我们增加了对参数的IEnumerable支持之前使用更简单的解决方案。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35727010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档