下面是从代码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/await
C#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
返回Task
或Task<>
不返回的方法, …
我在Windows 7上运行Git-1.8.0-preview20121022,安装时只使用"Git Bash"(对Windows cmd最少侵入).
当我从开始菜单快捷方式打开Git Bash时,历史记录一切正常.
但是当Git Bash here
上下文菜单(git-cheetah
shell扩展一个或更简单的注册表)是启动会话的时候,来自该会话的命令不会保存到.bash_history
.
怎么能搞清楚为什么会这样?或者更好的是,有人知道如何解决这个问题吗?
我们使用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遇到同样的问题,可能是因为:
该GettingStarted
页面JS测试驱动器维基说,我们可以在不同的机器比在JS测试驱动程序服务器运行上运行的浏览器:
在运行任何测试之前,您需要启动测试服务器并捕获至少一个从属浏览器.服务器不必驻留在测试运行器所在的机器上,并且浏览器本身也可以位于不同的机器上.
continuous-integration hudson windows-server-2003 js-test-driver jenkins
如何从Travis-CI中的命令中获取build_number(和其他构建元数据)after_script
?
已经尝试过的内容:
您还可以使用模板自定义将发送到频道的消息:
Run Code Online (Sandbox Code Playgroud)notifications: irc: channels: - "irc.freenode.org#travis" - "irc.freenode.org#some-other-channel" template: - "%{repository} (%{commit}) : %{message} %{foo} " - "Build details: %{build_url}"
您可以插入以下变量:
- 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验证这里).
似乎这应该是可行的,但找不到任何这样做的样本.
有人能指出我正确的方向吗?
我从requirejs和gruntjs开始.我在应用程序中有一个调试标志,如:
var debugEnabled = true;
Run Code Online (Sandbox Code Playgroud)
是否有某种方法可以设置为false
,从构建中requirejs
运行的优化中自动设置grunt
?
编辑:
为了澄清,我只有一个默认任务运行requirejs
优化器.该变量debugEnabled
位于我的应用程序本身的一个模块中,比如说AppLogger
,它是一个依赖项main
.
是否有一些方法requirejs
可以将此变量设置为false
,以便缩小版本AppLogger
将停止执行console.log
等.
如何在Jquery ajax()
方法中处理WCF服务器(REsTful)返回的错误/异常?
假设我已经includeExceptionDetailInFaults="true"
打开并使用了
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
Run Code Online (Sandbox Code Playgroud)
我回过头来的只是一个HTML字符串(HTML页面),里面埋藏着错误;
我想显示错误
我怎样才能做到这一点?
在ASP.NET MVC 4.5中完成的HTML5离线应用程序中,我们使用框架的内置功能捆绑和缩小样式和脚本.一切都适用于页面本身,但是为了写入Cache Manifest,在那里(因为我们正在编写它),它总是只发出捆绑的URL.
因此,我们无法在脱机模式下调试JavaScript,因为各个调试js文件没有进入应用程序缓存.
这就是我们的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)
我们将它包含在我们_Layout.cshtml
的页面本身中,如下所示:
@System.Web.Optimization.Scripts.Render("~/bundles/Scripts")
Run Code Online (Sandbox Code Playgroud)
当这非常适用于网页,通过发射单个js文件debug
是true
,和一个当捆绑文件debug
是false
.
输出 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=true
和debug=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) .content p, .content ul, .content h1 {
text-indent: 35px;
}
Run Code Online (Sandbox Code Playgroud)
这个选择器有没有快捷方式,比如.content p, ul, h1 {}
?
我们如何转换下面的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 …