我编写了以下csc
任务,用于使用Ruby / Rake / Albacore编译一些C#源代码。
csc :build do |csc|
csc.command = 'csc.exe'
csc.compile FileList['MyFolder/*.cs']
csc.output = 'F:My.dll'
csc.target = :library
end
我得到了这个“没有方法”的错误
NoMethodError:main:Object
的未定义方法`csc'
我尝试直接在我的shell中调用命令
cmd> csc.exe /target:library /out:F:My.dll /warn:0 /nologo /debug MyFolder/*.cs
使用Ruby shell执行方法
system('csc.exe /target:library /out:F:My.dll /warn:0 /nologo /debug MyFolder/*.cs')
我得到了这些错误!
错误CS2001:无法找到源文件'\ target:library' 错误CS2001:找不到源文件'F:My.dll' 错误CS2001:无法找到源文件'\ warn:0' 错误CS2001:找不到源文件'\ nologo' 错误CS2001:找不到源文件'\ debug'
我更改了Ruby shell execute方法以使用args数组参数
system('csc.exe', '/target:library', '/out:F:My.dll', '/warn:0', '/nologo', '/debug', 'MyFolder/*.cs')
得到了不同的路径错误
错误CS1504:无法打开源文件'MyFolder \ my.cs'('系统无法找到指定的文件。')
我不知道为什么这不起作用。
答案 0 :(得分:1)
Dir.chdir('/path/to/the-directory/where/you-issued-the-command')
system('csc.exe /target:library /out:F:My.dll /warn:0 /nologo /debug MyFolder/*.cs')
chdir
调用在您的情况下可能很重要,因为您必须在发出命令的同一目录中运行该命令(在cmd中)。
答案 1 :(得分:1)
对于初学者,我确定您使用的是错误版本的长鳍金枪鱼。 csc
方法在Albacore 1.0的全局范围中定义,并且在Albacore 2.0中根本不存在。这就是您看到此错误的原因。
NoMethodError:未定义的方法' csc' for main:Object
你的Gemfile中可能有一个乐观的依赖
gem "albacore"
或使用unversioned gem install命令
$ gem install albacore
这将使用全新的API为您带来新发布的Albacore 2.0。如果您想继续使用该版本并且需要弄清楚如何拨打类似的电话,请查看the wiki。如果你想继续使用Albacore 1.0,请使用悲观版本运算符来获取任何1.x版本。
gem "albacore", "~> 1.0"
或
$ gem install albacore --version "~> 1.0"
您想要检查CSC task specification,官方1.0版本更改了一些属性和样式。
csc :build do |cmd|
cmd.compile = FileList['MyFolder/*.cs']
cmd.out = "F:/My.dll"
cmd.target = :library
end
但是,根据您的原始system
调用,您似乎仍然遇到某些文件路径或文件存在问题。在IRB中尝试一些File.exist?('foo')
次调用,与Rakefile在同一个文件夹中,看看你得到了什么。
如果您在使用当前工作目录时遇到问题,则每个exec-based task(其中csc
为1)都会继承一些额外的属性,您可能需要将working_directory
设置为一些子路径。
csc :build do |cmd|
cmd.working_directory = "foo"
cmd.compile = FileList['MyFolder/*.cs']
cmd.out = "F:/My.dll"
cmd.target = :library
end