是否可以为自定义msbuild任务提供UI可选选项?

时间:2014-05-30 11:09:49

标签: visual-studio msbuild msbuild-task

我已经构建了一个自定义的msbuild任务,用于转换我在引擎中使用的格式的3D模型。但是,我想提供一些可选行为。例如,允许用户选择是否计算切线数组,是否反转索引的绕组顺序等。

在为每个文件选择Build action的实际用户界面中,是否可以定义自定义字段,然后将其输入到任务的输入参数中?例如" Compute Tangents"保管箱,您可以在其中选择TrueFalse

如果有可能,怎么样?除了定义多个任务之外还有其他选择吗?即ConvertModelTask​​,ConvertModelComputeTangentTask,ConvertModelReverseIndicesTask等。

2 个答案:

答案 0 :(得分:0)

MsBuild自定义任务中的所有内容都必须具有“可设置属性”才能驱动行为。

选项1。   定义一个ENUM-esque来驱动你的行为。

从内存中,MSBuild.ExtensionPack.tasks和MSBuild.ExtensionPack.Xml.XmlFile TaskAction =“ReadElementText”执行此类操作。 “TaskAction”是一个枚举的东西。我说“esque”,因为你可以在外面做的就是设置一个字符串。然后在代码中,将字符串转换为内部枚举。

请参阅此处的代码:

http://searchcode.com/codesearch/view/14325280

选项2:您仍然可以在任务上使用OO。为共享逻辑创建BaseTask(抽象),然后将其子类化,并使另一个类成为子类,并调用您调用的msbuild任务。

SvnExport这样做。 SvnClient是基类。它有几个子类。

请参阅此处的代码:

https://github.com/loresoft/msbuildtasks/blob/master/Source/MSBuild.Community.Tasks/Subversion/SvnExport.cs

答案 1 :(得分:0)

您可以深入了解EnvDTEUITypeEditor,但由于您已经拥有自定义任务,为什么不使用基本的WinForm保持简单?

namespace ClassLibrary1
{
    public class Class1 : Task
    {
        public bool ComputeTangents { set { _computeTangents = value; } }

        private bool? _computeTangents;

        public override bool Execute()
        {
            if (!_computeTangents.HasValue)
                using (var form1 = new Form1())
                {
                    form1.ShowDialog();
                    _computeTangents = form1.checkBox1.Checked;
                }

            Log.LogMessage("Compute Tangents: {0}", _computeTangents.Value);

            return !Log.HasLoggedErrors;
        }
    }
}