我已经构建了一个自定义的msbuild任务,用于转换我在引擎中使用的格式的3D模型。但是,我想提供一些可选行为。例如,允许用户选择是否计算切线数组,是否反转索引的绕组顺序等。
在为每个文件选择Build action
的实际用户界面中,是否可以定义自定义字段,然后将其输入到任务的输入参数中?例如" Compute Tangents"保管箱,您可以在其中选择True
或False
?
如果有可能,怎么样?除了定义多个任务之外还有其他选择吗?即ConvertModelTask,ConvertModelComputeTangentTask,ConvertModelReverseIndicesTask等。
答案 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是基类。它有几个子类。
请参阅此处的代码:
答案 1 :(得分:0)
您可以深入了解EnvDTE
或UITypeEditor
,但由于您已经拥有自定义任务,为什么不使用基本的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;
}
}
}