F# 如何在伪.Deploy部署脚本中引用FakeLib.dll?

F# 如何在伪.Deploy部署脚本中引用FakeLib.dll?,f#,f#-fake,F#,F# Fake,我试图在部署脚本中引用本地Fake.Deploy安装中的FakeLib.dll,但似乎找不到正确的使用路径。我发现Environment.CurrentDirectory指向我的伪.Deploy安装,但只是使用 #r @"FakeLib.dll" 不起作用: Deploy messages { 2015-05-12 09::22:50.413 2015-05-12 09::22:50.417 2015-05-12 09::22:50.417 Install.fsx(2,1): er

我试图在部署脚本中引用本地Fake.Deploy安装中的FakeLib.dll,但似乎找不到正确的使用路径。我发现Environment.CurrentDirectory指向我的伪.Deploy安装,但只是使用

#r @"FakeLib.dll"
不起作用:

Deploy messages
{
  2015-05-12 09::22:50.413
  2015-05-12 09::22:50.417
  2015-05-12 09::22:50.417 Install.fsx(2,1): error FS0082: Could not resolve this reference. Could not locate the assembly "FakeLib.dll". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. (Code=MSB3245)
  2015-05-12 09::22:50.432
  2015-05-12 09::22:50.432
  2015-05-12 09::22:50.433 Install.fsx(2,1): error FS0084: Assembly reference 'FakeLib.dll' was not found or is invalid
}
我在web上找到的示例建议将FAKE与我的应用程序一起部署在NuGet包中,并像这样引用它:

#r @"tools\FAKE\tools\FakeLib.dll"
但这似乎有些过分,而且是不必要的参考


有人知道引用本地Fake.Deploy安装的路径吗?

我自己刚刚找到了答案:部署后fsx脚本中用于引用的基本目录是部署本身的目录

假设您的Fake.Deploy安装在

 .\Fake.Deploy\
然后Environment.CurrentDirectory将指向此目录,而_SOURCE_directory将指向

.\Fake.Deploy\deployments\\{your_app}\active
因此,您可以从部署后fsx脚本中引用FakeLib.dll,如下所示:

 #r @"..\..\..\FakeLib.dll"
我将尝试将此添加到

也就是说,在应用程序中部署FAKE实际上需要注意以下几点:

  • 它确保使用正确的版本来运行部署脚本
  • 伪.Deploy安装可能不在您的控制之下,因此可能会阻止您访问其二进制文件
  • Fake.Deploy的配置允许指定不同的deployment位置(通过“WorkDirectory”),因此当使用非默认位置时,此硬编码路径将中断

请注意,当通过Fake.Deploy发送NuGet包时,代理将从与Fake可执行文件相同的文件夹中运行包根目录中的脚本。因此,当您的fake.exe位于C:\fake\tools\fake.exe中时,您的文件位于C:\fake\tools\deployments\YourApplication\active中。如果需要从该目录中读取属性文件或其他内容,脚本将看不到它。因此,您需要在脚本中执行以下操作:

open System
open System.IO
let arguments = System.Environment.GetCommandLineArgs()
let script = arguments.[1]
let scriptDirectory = script.Replace(@"\NameOfMyDeployScript.fsx", @"")
System.IO.Directory.SetCurrentDirectory(scriptDirectory)
我想把它放在那里,这样就不会有人因为试图访问某个文件而失去理智。如果不更改目录,您将看到如下错误:

System.IO.FileNotFoundException:找不到文件“C:\Fake\tools\myfile.properties”