TFS2015在“找不到文件”的所有命令行命令上构建失败

时间:2016-01-20 12:23:45

标签: tfs continuous-integration tfsbuild tfs2015

在Team Foundation Server 2015 Build(内部部署)中,我遇到运行简单命令行命令的问题。所有命令行任务都失败,并显示以下错误:“找不到文件:”。

以下面的构建定义为例:

enter image description here

这是使用内部部署的Build Agent执行的,并且会在日志中失败并出现以下异常:

BUILD FAILED
2016-01-20T12:04:47.5127709Z ##[warning]Filename doesn't indicate a full path to a executable file.
2016-01-20T12:04:47.5127709Z Executing the following commandline. (workingFolder = D:\_work\2\s)
2016-01-20T12:04:47.5127709Z date 
2016-01-20T12:04:47.5127709Z Error message highlight pattern: 
2016-01-20T12:04:47.5127709Z Warning message highlight pattern:      
2016-01-20T12:04:47.5439748Z ##[error]File not found: date

当然这是一个简化的例子,我只想使用date /t命令输出当前日期。但是我尝试过的所有常规命令行命令都会出现同样的问题,例如dirtimepath等。MSDN does not provide any troubleshooting info就此而言,除此之外执行的工具必须位于PATH变量中。

该问题并非特定于一个构建定义或回购;它也可以在其他人身上复制。

构建作为内置的 svc_tfsbuild 帐户运行。

我可能认为这可能是一个简单的设置,或者 - 疯狂猜测 - 与权利相关的问题,但找不到任何文档在哪里查看或检查什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:13)

看来这也是known issue on MS Connect

简而言之,MSFT提到以下内容:

  

命令提示符内置的命令不起作用。根据你的PATH / PATHEXT可以解决任何问题。

在2015年10月27日的评论中,声明将在下一个冲刺中修复此问题。目前提到的解决方法是先执行 cmd.exe ,然后将其余部分作为参数提供。

使用原始问题中的示例,这将导致:

public class MainActivity extends Activity {
    public static int MILISEGUNDOS_ESPERA = 1500;
    private RelativeLayout mealLayout;
    private ToggleButton toggle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mealLayout = (RelativeLayout) findViewById(R.id.layout);  
        final Vibrator vibrator;
        vibrator = (Vibrator) getSystemService(MainActivity.VIBRATOR_SERVICE);
        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                esperarYCerrar(MILISEGUNDOS_ESPERA);
                if (action == MotionEvent.ACTION_DOWN) {
                    vibrator.vibrate(1500);
                } else if (action == MotionEvent.ACTION_UP) {
                    vibrator.cancel();
                }
                return true;
            }
        });
    }

    public void esperarYCerrar(int milisegundos) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                // acciones que se ejecutan tras los milisegundos
                finalizarApp();
                cambiarcolor();
            }
        }, milisegundos);
    }

    /**
     * Finaliza la aplicación
     */
    public void finalizarApp() {
        mealLayout.setBackgroundColor(Color.RED);
    }
    public void cambiarcolor() {
        ToggleButton button=(ToggleButton) findViewById(R.id.button1);

        if (button.isChecked())
            mealLayout.setBackgroundColor(Color.GREEN);
        else
            mealLayout.setBackgroundColor(Color.RED);
    }
}

我确实可以确认这是有效的。