我想在Kotlin写一个Spek测试.测试应从该src/test/resources文件夹中读取HTML文件.怎么做?
class MySpec : Spek({
describe("blah blah") {
given("blah blah") {
var fileContent : String = ""
beforeEachTest {
// How to read the file file.html in src/test/resources/html
fileContent = ...
}
it("should blah blah") {
...
}
}
}
})
Run Code Online (Sandbox Code Playgroud) 我们有一个解决方案,其中包含一个webapp项目和一些附带的项目.我们的TFS 2010每晚都在构建此解决方案,并将Web应用程序部署到IIS服务器.它像微风一样奔跑.
在TFS构建定义的Process选项卡中,您可以指定"MSBuild Arguments".这是我们的构建定义中设置的值(全部在一行中):
/p:DeployOnBuild=True
/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=True
/p:MSDeployPublishMethod=WMSVC
/p:MSDeployServiceUrl=<service url of IIS>
/p:DeployIisAppPath="<a website>"
/p:UserName=<domain>\<user
/p:Password=<password>
Run Code Online (Sandbox Code Playgroud)
这篇博客文章解释了整个设置:http: //vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html.
到现在为止还挺好.
现在我们已经添加了第二个webapp项目,我们希望每晚都将它部署到同一个IIS中.不幸的是,在这种情况下,设置不适用.TFS只部署一个webapp.
还有其他人有同样的问题:
当解决方案具有多个Web应用程序时,TFS 2010 + MSDeploy
和
Vishal R. Joshi建议为每个webapp项目添加一些属性.现在,发布版本将为每个webapp项目生成webpackage(zip文件),该项目具有以下定义的属性:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DeployOnBuild>True</DeployOnBuild>
<DeployTarget>Package</DeployTarget>
<CreatePackageOnPublish>true</CreatePackageOnPublish>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
好.但是如何让TFS将每个webapp部署到IIS呢?还有其他想法吗?
我们正在托管一个公司存储库,它充当着名存储库的代理(例如Maven Central和Clojars).我希望Leiningen首先进入企业存储库.只有当公司存储库未能提供工件时,Leiningen才会询问标准存储库.这应该是我所有项目的默认行为.我需要做什么配置?
我已将公司存储库添加为〜/ .lein/profiles.clj中的镜像:
{:user {:mirrors {"our-repo" {:name "our-repo"
:url "http://our-repo/all/"}}}}
Run Code Online (Sandbox Code Playgroud)
不幸的是,此设置没有影响.Leiningen从Maven Central下载文物:
PS> lein repl
Retrieving org/clojure/clojure/1.5.1/clojure-1.5.1.pom from central
...
Run Code Online (Sandbox Code Playgroud)
更新
xsc建议使用指向公司存储库的镜像定义覆盖Maven Central存储库.有用.现在,而不是去外部Maven Repository Leiningen从公司存储库中检索工件.
他/她还建议指定一个额外的存储库定义来安装回退机制.不幸的是,这并不是很好,因为Leiningen抱怨这个设置:
:repositories detected in user-level profiles! [:user]
See https://github.com/technomancy/leiningen/wiki/Repeatability
Run Code Online (Sandbox Code Playgroud)
这个警告非常烦人.出于这个原因,我会弃权.还有另一种安装回退机制的方法吗?
我想从MSBuild切换到FAKE.在我的MSBuild脚本中,我通过调用具有DeployOnBuild = True和DeployTarget = Package属性的MSBuild来创建Webdeploy包.这将触发webdeploy在构建运行时生成部署包:
<MSBuild Projects="@(ItemToBuild)"
Targets="Build"
Properties="Configuration=$(Configuration);
Platform=$(Platform);
DeployOnBuild=True;
DeployTarget=Package;
OutFolder=$(OutFolder)" />
Run Code Online (Sandbox Code Playgroud)
我怎么能用FAKE做同样的事情?我走到这一步:
Target "Build" (fun _ ->
!! solutionFile
|> MSBuildRelease binDir "Build"
|> Log "Build-Output: "
)
Run Code Online (Sandbox Code Playgroud)
如何指定所需的属性?
我刚刚在ProjectScaffold生成的FAKE构建脚本中找到了这个目标:
// Copies binaries from default VS location to expected bin folder
// But keeps a subdirectory structure for each project in the
// src folder to support multiple project outputs
Target "CopyBinaries" (fun _ ->
!! "src/**/*.??proj"
-- "src/**/*.shproj"
|> Seq.map (fun f -> ((System.IO.Path.GetDirectoryName f)
</> "bin/Release", "bin"
</> (System.IO.Path.GetFileNameWithoutExtension f)))
|> Seq.iter (fun (fromDir, toDir) -> CopyDir toDir fromDir (fun _ -> true))
)
Run Code Online (Sandbox Code Playgroud)
我的问题:这个奇怪的</>操作员做什么?
(我的互联网搜索不是很成功.)
Clojure有一个很好的函数叫做分区,它可以处理序列.它将给定的序列分成一系列同样长的列表.第一个参数指定fragaments的长度.第二个参数是一个偏移量,它指定片段的下一个开始.
(partition 3 1 (range 5))
;;=> ((0 1 2) (1 2 3) (2 3 4))
(partition 4 6 (range 20))
;;=> ((0 1 2 3) (6 7 8 9) (12 13 14 15))
(partition 4 3 (range 20))
;;=> ((0 1 2 3) (3 4 5 6) (6 7 8 9) (9 10 11 12) (12 13 14 15) (15 16 17 18))
Run Code Online (Sandbox Code Playgroud)
https://clojuredocs.org/clojure.core/partition
我正在寻找F#中的等效函数.显然,List.partition还有其他功能(https://msdn.microsoft.com/en-us/library/ee353782.aspx).也许有一个图书馆提供这样的功能?
通过遵循连续传递样式(CPS),可以使每个递归函数尾递归.据我所知,你把第一次递归调用后的所有内容都放到一个函数中,然后把它交给同一个调用.因此,递归调用是函数中的最后一个语句,编译器能够进行尾调用优化.这意味着递归被循环替换.没有额外的堆栈帧消耗.
延续是一项功能,它可以完成所有剩下的工作.在我看来,每次递归调用(或循环迭代),延续都在增长.我想知道在执行循环时这个不断增长的指令集存储在内存中的哪个位置.据我所知,只存在两个可以保存动态数据的内存部分:堆栈和堆.我会排除堆栈,因为堆栈帧大小在已经分配时是固定的.它不能保持延续的增长指令集,因此堆剩余.也许堆栈帧包含指向存储连续函数的存储器地址的指针.这个假设是否正确?
这里有一个简单的例子.这是一个递归函数,它不是尾递归的:
// bigList: int -> int list
let rec bigList = function
| 0 -> []
| n -> 1 :: bigList (n-1)
Run Code Online (Sandbox Code Playgroud)
当参数n很小时,一切都可以:
> bigList 3;;
val it : int list = [1; 1; 1]
Run Code Online (Sandbox Code Playgroud)
但是当n很好时你可以得到一个stackoverflow错误:
> bigList 170000;;
Stack overflow in unmanaged: IP: 0x2dcdb0, fault addr: 0xbf759ffc
Stack overflow in unmanaged: IP: 0x2dcdb0, fault addr: 0xbf758ffc
...
Run Code Online (Sandbox Code Playgroud)
这基本上是相同的功能,但在延续传递方式:
// bigListC: int -> (int list -> 'a) -> 'a
let rec bigListC n c = …Run Code Online (Sandbox Code Playgroud) 问题:FAKE中是否有命令打印构建脚本中的所有已定义目标?
我想以这样的方式设置我的FAKE构建:当我没有指定目标时,它会在构建脚本中打印所有可用目标的列表.
例如:
> build.cmd
Available targets:
- Clean
Depends on: []
- DeleteBinObj
Depends on: []
- RestorePackages
Depends on: ["Clean"]
- Build
Depends on: ["RestorePackages"]
- CopyBinaries
Depends on: ["RunTests"]
- RunTests
Depends on: ["Build"]
- Default
Depends on: ["CopyBinaries"]
Run Code Online (Sandbox Code Playgroud)
在FAKE构建脚本中,我将定义如下内容:
Target "Default" (fun _ ->
listTargets
)
RunTargetOrDefault "Default"
Run Code Online (Sandbox Code Playgroud)
唯一缺少命令listTargets的东西.