2012-08-01 50 views
6

https://github.com/magarciaEPFL/scaladotnet的README創建一個簡單的 「Hello World」 的應用程序在Windows EXE:斯卡拉.Net的HelloWorld的

package hello.world 

object Main { 
    def main(args: Array[String]) { 
    println("Hello, World!") 
    } 
} 

內置的.exe從README命令:

scalacompiler.exe^
-d C:\test\bin^
-target:exe^
-Ystruct-dispatch:no-cache^
-Xassem-name HelloWorld.exe^
-Xassem-extdirs C:\scala.net^
-Xshow-class hello.world.Main^
C:\test\src\HelloWorld.scala 

在使用Windows 7 Pro,64位時,嘗試運行時收到此錯誤:

C:\ test \ bin> HelloWorld.exe

未處理的異常:System.IO.FileNotFoundException:未能加載 文件或程序集scalalib,版本= 0.0.0.0,文化=中性, 公鑰=空'或它的一個依賴。系統不能 找到指定的文件。在Main(String [] args)

Scala .Net編譯器目錄直接在路徑中,但似乎HelloWorld.exe無法找到並加載該目錄中的scalalib.dll。根據下面的註釋,將HelloWorld.exe直接複製到C:\ scala.net目錄並從那裏執行,按預期工作。但是,將.exe放入另一個目錄,並將C:\ scala.net目錄作爲PATH的一部分,則不會。

有什麼不對?

+0

分享你的代碼。 – JSJ 2012-08-01 13:22:52

+0

HelloWorld.exe和scalalib.dll位於相同的文件夾中? – hmqcnoesy 2012-08-01 13:51:23

+0

不,HelloWorld.exe位於C:\ test \ bin \中,而scalalib.dll位於C:\ scala.net \中,C:\ scala.net是該路徑的一部分。我期望找到.dll文件,位於路徑中的一個目錄中。 – 2012-08-01 13:55:50

回答

6

在使用%PATH%環境變量查找程序集時,.NET Framework不遵循Win32。

簡短的回答是:如果它不在同一個文件夾中,那麼它需要在GAC中,否則它將不會被找到。

另外,參見this question

+0

我發現需要複製到HelloWorld.exe的.exe目錄(已經安裝了最新的.NET運行時)的最小運行時DLL文件爲:IKVM.OpenJDK.Core.dll,IKVM.OpenJDK.Util。 dll,IKVM.Runtime.dll和scalalib.dll – 2012-08-01 14:59:30

+0

優秀的,直接的答案。 – 2012-08-01 14:59:53