2

也许是一个转储问题。Cake声称它是一个可以用 C# 编写的构建自动化系统。我实际上玩了一下,现在想知道是否可以在 build.cake 中调用 .Net 方法。当时我有以下build.cake:

var target = Argument("target", "Default");

Task("NuGet")
   .Does(() =>
   {
       // Get local directory
       // Get all packages.config files in local directory
       // Call nuget restore for every file
       var currentDir =  System.IO.GetCurrentDirectory(); // This doesn't work
       var allPgkConfigs = System.IO.Directory.GetFiles(currentDir, "packages.config", System.IO.SearchOption.AllDirectories); // This doesn't work

       foreach (var pgk in allPgkConfigs)
       {
           // GetNuGetPackageId(pkg);
       }
       
   });

Task("Build")
  .Does(() =>
{
  MSBuild("MySolution.sln");
});

RunTarget(target);

调用时build.ps1 -target nuget出现以下错误:

PS C:\> .\build.ps1 -Target nuget
Preparing to run build script... 
Running build script...
Analyzing build script...
Processing build script...
Compiling build script...
Error: C:/Users/Mewald-T550/XAP_Playground/build.cake(6,26): error CS0234: The type or namespace name 'GetCurrentDirectory' does not exist in the namespace 'System.IO' (are you missing an assembly reference?) 

正如蛋糕已经指出的那样,它找不到System.IO如何将此引用添加到蛋糕?

我知道 cake 提供了一些内置文件操作,但我想知道如何将 .Net Framework 方法添加到 cake 脚本中。

谢谢

4

3 回答 3

4

您正在调用命名空间上的方法

改变

System.IO.GetCurrentDirectory()

System.IO.Directory.GetCurrentDirectory()

试过这个脚本,它工作得很好

var directory = System.IO.Directory.GetCurrentDirectory();
Information(directory);

也就是说,Cake 内置了几个 IO 抽象

即这将达到相同的效果:

var allPgkConfigs = GetFiles("./**/packages.config");
foreach (var pgk in allPgkConfigs)
{
   // GetNuGetPackageId(pkg);
}

如果你只想要当前目录,你可以使用

Context.Environment.WorkingDirectory

要不就

var curDir = MakeAbsolute(Directory("./"));
Information("Current directory is: {0}", curDir);
于 2017-06-16T14:00:40.793 回答
0

参考指令 参考指令用于引用外部程序集以在您的脚本中使用。

用法 该指令有一个参数,即要加载的 dll 的路径。

#r "bin/myassembly.dll"
or
#reference "bin/myassembly.dll"

试着让它指向 C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.dll

于 2017-06-16T13:34:38.887 回答
0

您可以使用参考指令:

#r "bin/myassembly.dll"
or
#reference "bin/myassembly.dll"

http://cakebuild.net/docs/fundamentals/preprocessor-directives

于 2017-06-16T13:34:10.733 回答