小编Har*_*til的帖子

使用DynamicProxy拦截对异步方法的调用

下面是从代码Intercept上实现自定义类型的方法IInterceptor的的城堡动态代理库.此片段来自此处发布的基于AOP的日志记录概念验证控制台应用程序.

    public void Intercept(IInvocation invocation)
    {
        if (Log.IsDebugEnabled) Log.Debug(CreateInvocationLogString("Called", invocation));
        try
        {
            invocation.Proceed();
            if (Log.IsDebugEnabled)
                if (invocation.Method.ReturnType != typeof(void))
                    Log.Debug("Returning with: " + invocation.ReturnValue);
        }
        catch (Exception ex)
        {
            if (Log.IsErrorEnabled) Log.Error(CreateInvocationLogString("ERROR", invocation), ex);
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这在常规方法调用中按预期工作,但在尝试使用async方法时(使用async/awaitC#5.0中的关键字)则不行.我相信,我也理解这背后的原因.

为了async/await工作,编译器将方法的功能主体添加到幕后的状态机中,并且一旦awaitable遇到无法同步完成的第一个表达式,控件将返回到调用者.

此外,我们可以询问返回类型并确定我们是否正在处理这样的async方法:

            if (invocation.Method.ReturnType == typeof(Task) || 
                (invocation.Method.ReturnType.IsGenericType && 
                 invocation.Method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)))
                Log.Info("Asynchronous method found...");
Run Code Online (Sandbox Code Playgroud)

这适用于那些async返回TaskTask<>不返回的方法, …

c# reflection aop castle-dynamicproxy async-await

27
推荐指数
3
解决办法
8226
查看次数

"Git Bash here"并不保留会话之间的bash历史记录

我在Windows 7上运行Git-1.8.0-preview20121022,安装时只使用"Git Bash"(对Windows cmd最少侵入).

当我从开始菜单快捷方式打开Git Bash时,历史记录一切正常.

但是当Git Bash here上下文菜单(git-cheetahshell扩展一个或更简单的注册表)是启动会话的时候,来自该会话的命令不会保存到.bash_history.

怎么能搞清楚为什么会这样?或者更好的是,有人知道如何解决这个问题吗?

bash shell msysgit windows-7 git-bash

9
推荐指数
3
解决办法
4465
查看次数

如何在Jenkins上使用远程浏览器进行js-test-driver任务?

我们使用Jenkins将.NET Web应用程序与NAnt/NUnit持续集成以进行.NET测试.Jenkins配置了9个从站(所有这些都是Windows Server 2003),它们运行许多构建及其自动化测试.

我们正在尝试设置js-test-driver来运行我们的JavaScript单元测试,而下面的NAnt任务在开发人员工作站本地运行良好.Internet Explorer是我们唯一想要测试的浏览器,因为它是我们所有Web应用程序的唯一目标浏览器.

<target name="jsTests" >
    <echo message="Running JavaScript tests..." />
    <exec program="java.exe">
        <arg line="-jar '${jstestdriver.dir}\JsTestDriver.jar'" />
        <arg line="--config '${ui.webtests.dir}\JsTestDriver.conf'" />
        <arg line="--port 9876"/>
        <arg line="--browser 'C:\program files\internet explorer\iexplore.exe'"/>
        <arg line="--verbose"/>
        <arg line="--reset"/>
        <arg line="--tests all"/>
        <arg line="--testOutput '${results.jstestdriver.dir}'"/>
    </exec>
</target>
Run Code Online (Sandbox Code Playgroud)

我们在Jenkins遇到同样的问题,可能是因为:

  1. 它是一个服务器,我们作为服务帐户运行
  2. 服务器上的浏览器安装存在安全限制

GettingStarted页面JS测试驱动器维基说,我们可以在不同的机器比在JS测试驱动程序服务器运行上运行的浏览器:

在运行任何测试之前,您需要启动测试服务器并捕获至少一个从属浏览器.服务器不必驻留在测试运行所在的机器上,并且浏览器本身也可以位于不同的机器上.

  1. 有人在Jenkins/Windows设置上做过这个吗?
  2. 是否有其他可选的可扩展设置来运行js-test-driver?

continuous-integration hudson windows-server-2003 js-test-driver jenkins

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

如何在after_script命令中获取Travis-CI build_number

如何从Travis-CI中的命令中获取build_number(和其他构建元数据)after_script

已经尝试过的内容:

有关构建配置文档在IRC通知部分中说明了这一点:

您还可以使用模板自定义将发送到频道的消息:

notifications:
  irc:
    channels:
      - "irc.freenode.org#travis"
      - "irc.freenode.org#some-other-channel"
    template:
      - "%{repository} (%{commit}) : %{message} %{foo} "
      - "Build details: %{build_url}"
Run Code Online (Sandbox Code Playgroud)

您可以插入以下变量:

  • repository:您的GitHub repo URL.
  • build_number:内部版本号.
  • branch:分支构建名称.
  • commit:缩短提交SHA
  • 作者:提交作者姓名.
  • 消息:构建的travis消息.
  • compare_url:提交更改视图URL.
  • build_url:构建详细信息的URL.

试图让这个在after_script命令中工作,如下所示,根本不起作用:

language: java
after_script:
  - git commit -a -m "Committed by Travis-CI build number: %{build_number}"
Run Code Online (Sandbox Code Playgroud)

它的表现就好像.travis.yml文件不存在/无效的(尽管它并通过特拉维斯-CI YAML验证这里).

似乎这应该是可行的,但找不到任何这样做的样本.

有人能指出我正确的方向吗?

continuous-integration build github travis-ci

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

在grunt/requirejs构建期间设置/取消设置调试标志

我从.我在应用程序中有一个调试标志,如:

var debugEnabled = true;
Run Code Online (Sandbox Code Playgroud)

是否有某种方法可以设置为false,从构建中requirejs运行的优化中自动设置grunt

编辑: 为了澄清,我只有一个默认任务运行requirejs优化器.该变量debugEnabled位于我的应用程序本身的一个模块中,比如说AppLogger,它是一个依赖项main.

是否有一些方法requirejs可以将此变量设置为false,以便缩小版本AppLogger将停止执行console.log等.

javascript debugging build requirejs gruntjs

6
推荐指数
2
解决办法
4334
查看次数

Jquery ajax()处理WCF错误?

如何在Jquery ajax()方法中处理WCF服务器(REsTful)返回的错误/异常?

假设我已经includeExceptionDetailInFaults="true"打开并使用了

error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert(XMLHttpRequest.responseText);
 }
Run Code Online (Sandbox Code Playgroud)

我回过头来的只是一个HTML字符串(HTML页面),里面埋藏着错误;

我想显示错误

  1. 找不到服务(HTTP 400和500错误)
  2. WCF抛出的.net异常到客户端页面(javascript)

我怎样才能做到这一点?

wcf jquery

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

ASP.NET MVC 4捆绑 - DEBUG模式下的单个文件URL

问题:

在ASP.NET MVC 4.5中完成的HTML5离线应用程序中,我们使用框架的内置功能捆绑和缩小样式和脚本.一切都适用于页面本身,但是为了写入Cache Manifest,在那里(因为我们正在编写它),它总是只发出捆绑的URL.

因此,我们无法在脱机模式下调试JavaScript,因为各个调试js文件没有进入应用程序缓存.

码:

RegisterBundles

这就是我们的BundleConfig.RegisterBundles样子:

    // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/Scripts").Include(
                   "~/Scripts/*.js"
                   ));
    }
Run Code Online (Sandbox Code Playgroud)

HTML标记

我们将它包含在我们_Layout.cshtml的页面本身中,如下所示:

@System.Web.Optimization.Scripts.Render("~/bundles/Scripts")
Run Code Online (Sandbox Code Playgroud)

当这非常适用于网页,通过发射单个js文件debugtrue,和一个当捆绑文件debugfalse.

输出 debug=true

<script src="/Scripts/ScriptOne.js"></script>
<script src="/Scripts/ScriptTwo.js"></script>
<script src="/Scripts/ScriptThree.js"></script>
Run Code Online (Sandbox Code Playgroud)

输出 debug=false

<script src="/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1"></script>
Run Code Online (Sandbox Code Playgroud)

缓存清单

这就是我们将脚本包含在我们的内容中的方法 CacheManifest

@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/Scripts")
Run Code Online (Sandbox Code Playgroud)

输出debug=truedebug=false

/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1
Run Code Online (Sandbox Code Playgroud)

我们想要什么?

我们想知道是否有一种方法可以像这样输出Cache-Manifest:

输出 debug=true

/Scripts/ScriptOne.js
/Scripts/ScriptTwo.js
/Scripts/ScriptThree.js
Run Code Online (Sandbox Code Playgroud)

输出 debug=false

/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc razor asp.net-mvc-4

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

使用相同的父级简化css选择器

.content p, .content ul, .content h1 {
       text-indent: 35px;
}
Run Code Online (Sandbox Code Playgroud)

这个选择器有没有快捷方式,比如.content p, ul, h1 {}

                                                                                                 

css css-selectors

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

转换适用于Mac OS X的Linux shell脚本

我们如何转换下面的shell脚本,以便在Mac OS X上实现相同的结果?

# To generate secure SSH deploy key for a github repo to be used from Travis
# https://gist.github.com/floydpink/4631240
base64 --wrap=0 ~/.ssh/id_rsa_deploy > ~/.ssh/id_rsa_deploy_base64
ENCRYPTION_FILTER="echo \$(echo \"- secure: \")\$(travis encrypt \"\$FILE='\`cat $FILE\`'\" -r floydpink/harimenon.com)"
split --bytes=100 --numeric-suffixes --suffix-length=2 --filter="$ENCRYPTION_FILTER" ~/.ssh/id_rsa_deploy_base64 id_rsa_

# To reconstitute the private SSH key once running inside Travis (typically from 'before_script')
echo -n $id_rsa_{00..30} >> ~/.ssh/id_rsa_base64
base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

我可以找出相应的base64 …

macos bash shell posix split

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