2016-07-11 8 views
3

Gibt es eine Möglichkeit, dies in F # tun:erforderlich DLL Zeichenfolge Pfad in F # mit

let fakeToolsPath = "D:\tools\FAKE\tools\FakeLib.dll" 

#r fakeToolsPath 

die gefälschten Tool auf einem anderen Weg sind abhängig von dem Build-Agenten, der den Code erstellt, so muß ich sein in der Lage, es dynamisch aus einer Umgebungsvariablen oder einer Konfigurationsdatei zu setzen.

+2

Ich glaube nicht, dass das funktioniert. Die Art, wie ich herumkomme, ist die Verwendung relativer Pfade in meinen '#r's, aber das könnte für dich nicht funktionieren. Dies ist ein bisschen wie ein Hack, aber man könnte sagen "#I @" D: \ tools \ FAKE \ tools \ FakeLib.dll "' und '#I @" C: \ OtherTools \ FAKE \ tools \ FakeLib.dll " 'und schließlich einfach' #r "FakeLib.dll" '. Ie nur enthalten, wo die Dlls leben können. Eine andere Option wäre, einen Haufen zu verwenden, wenn '# if's und dann als bedingtes Compiler-Symbol übergeben werden. – s952163

+0

Ja, es ist ein bisschen hacky, aber ich würde es in Betracht ziehen, das Beste aus der Situation zu machen. Alles in allem scheint der Aufbau von Agenten für den gleichen Code, der auf unterschiedliche Weise erstellt wurde, ein fehlerhafter Ansatz zu sein (es mag natürlich gute Gründe dafür geben, aber er ist sicherlich nicht ideal), so dass an manchen Stellen weniger als elegante Lösungen einfach ein Problem darstellen Preis, der bezahlt werden muss. – TeaDrivenDev

Antwort

6

Drei Ideen, um der zunehmenden hackiness - Sie werden die Richter, die man am sinnvollsten in Ihrem Szenario macht:

  1. In .fsx Skript, Sie __SOURCE_DIRECTORY__ das Verzeichnis erhalten verwenden können, wo das Skript befindet sich. Wenn sich Ihre DLL immer im selben Verzeichnis wie das Skript befindet, können Sie das als "Hook" verwenden, um dorthin zu gelangen.
  2. Es gibt eine Befehlszeile --reference Argument zu fsi.exe, die tun sollten, was Sie wollen. Wenn Sie stattdessen fake.exe verwenden, können Sie --fsiargs verwenden, um es weiterzuleiten (werfen Sie einen Blick auf den Link für Details).
  3. Wenn alles andere fehlschlägt, erstellen Sie einen symlink als separaten Buildschritt in Ihrer CI-Jobkonfiguration und codieren Sie einfach den Pfad im Skript.