Cake(C# make)在 build.cake 中使用 .Net Framework 方法
Cake (C# make) use .Net Framework methods in build.cake
可能是转储问题。 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?)
因为 cake 已经声明它找不到 System.IO
我怎样才能将这个引用添加到 cake?
我知道 cake 提供了一些内置功能 file operations,但我想知道如何将 .Net Framework 方法添加到 cake 脚本中。
感谢
您可以使用参考指令:
#r "bin/myassembly.dll"
or
#reference "bin/myassembly.dll"
见http://cakebuild.net/docs/fundamentals/preprocessor-directives
参考指令
reference 指令用于引用外部程序集以在您的脚本中使用。
用法
该指令有一个参数,即要加载的 dll 的路径。
#r "bin/myassembly.dll"
or
#reference "bin/myassembly.dll"
尝试让它指向 C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.dll
您正在调用命名空间上的方法
改变
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);
可能是转储问题。 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?)
因为 cake 已经声明它找不到 System.IO
我怎样才能将这个引用添加到 cake?
我知道 cake 提供了一些内置功能 file operations,但我想知道如何将 .Net Framework 方法添加到 cake 脚本中。
感谢
您可以使用参考指令:
#r "bin/myassembly.dll"
or
#reference "bin/myassembly.dll"
见http://cakebuild.net/docs/fundamentals/preprocessor-directives
参考指令 reference 指令用于引用外部程序集以在您的脚本中使用。
用法 该指令有一个参数,即要加载的 dll 的路径。
#r "bin/myassembly.dll"
or
#reference "bin/myassembly.dll"
尝试让它指向 C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.dll
您正在调用命名空间上的方法
改变
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);