小编Bri*_*haw的帖子

在InvokeProcess TF工作流活动中捕获regsvr32的输出

我有一个构建过程设置来使用团队构建来构建托管解决方案.此解决方案需要在构建解决方案之前向服务器注册非托管组件,因为我们通过COM与其进行交互.

我用来注册ComObject的活动(InvokeProcess)看起来像这样

regsvr32.exe /s ComObject.ocx
Run Code Online (Sandbox Code Playgroud)

我用来取消注册它的活动(InvokeProcess)看起来像这样

regsvr32.exe /u /s ComObject.ocx
Run Code Online (Sandbox Code Playgroud)

我还使用stdOutput和errOutput作为每个操作的消息添加了WriteBuildMessageWriteBuildError两个InvokeProcess活动.我还确保将构建消息的重要性设置为高.

我的理解是,这应该将标准输出和错误输出重定向到这些日志记录活动中.

只要我没有将/maxcpucountMSBuild 的参数设置为大于1的任何值,registrion,build和unregistrion就可以正常工作.

一旦我将其设置为大于1的值,我们在过程结束时的清理脚本会在尝试删除相关文件时失败并显示此错误消息.

Access to the path '...\ComObject.ocx' is denied.'
Run Code Online (Sandbox Code Playgroud)

我认为正在发生的事情是取消注册活动无法从服务器取消注册ComObject.ocx,因为MSBuild在多个cpu运行时没有完成.然后,当我开始尝试从构建服务器中删除它时,它仍然在系统中注册,并且将因访问被拒绝错误而失败.

那么如何将regsvr32输出到stdOutput和errOutput,以便WriteBuildMessage和writeBuildError活动将在构建日志中正确显示它.如果我用不存在的文件调用regsvr32,我在构建日志中看不到任何内容.

我希望这是有道理的.

更新

这个问题的解决方案来自pantelif解决方案的一个小调整.我所做的是在抛出异常的if块中,我使用它作为消息执行WriteBuildError:

String.Format("ErrorMessage: {0}", New System.ComponentModel.Win32Exception( System.Runtime.InteropServices.Marshal.GetL??astWin32Error() ).ToString() )
Run Code Online (Sandbox Code Playgroud)

这允许我从regsvr32.exe获取错误并将其写入构建日志.

msbuild team-build tfsbuild tfs2010

4
推荐指数
1
解决办法
1787
查看次数

如何在C#中设置编码?

我有编码的问题,我想设置编码,例如HttpWebResponse resp,在我看到它的地方说的东西resp.ContentEncoding = Encoding.UTF8,但在实践中这是错误的,因为它说ContentEncoding是一个只读属性,请帮助我.

c# asp.net encoding response character-encoding

2
推荐指数
1
解决办法
534
查看次数

如何编写Nunit TestCases来测试正确的字符串列表被返回

我有一个方法,如:

public virtual IList<string> Validate()
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想用NUnit进行单元测试.这是类车辆的一部分.

A Vehicle可以是不同类型,即.Car Boat Truck等等

在我的顶部,我TestFixture设置了VehicleTypes:

private VehicleType[] _vehicleTypes;

[SetUp]
public void MyTestInitialize()
{
    transScope = new TransactionScope();

    var boat= new VehicleType { Name = "boat" };
    var car = new VehicleType { Name = "car" };
    var truck = new VehicleType { Name = "truck" };

    _vehicleTypes= new VehicleType[] { boat, car, truck };

    ...
}
Run Code Online (Sandbox Code Playgroud)

我想要的是测试只从船的方法发回错误消息.

我的单元测试如下:

[TestCase(0, "This vehicle is inappropriate because …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc nunit unit-testing

1
推荐指数
1
解决办法
747
查看次数

为什么null <>"something"返回false

当我遇到一些让我对NULL值感到惊讶的事情时,我正在调试oracle数据库中的一个过程.任何人都可以解释为什么以下查询返回false,这里的非等式检查?

DECLARE
    vNullVariable VARCHAR2(2) := NULL;
    vVariable VARCHAR2(2) := 'Hi';
BEGIN
    IF vNullVariable <> vVariable THEN
        dbms_output.put_line( 'The variables are not equal' );
    ELSE
        dbms_output.put_line( 'The variables are equal' );
    END IF;
END;
Run Code Online (Sandbox Code Playgroud)

sql plsql oracle11g

1
推荐指数
1
解决办法
952
查看次数