初步解决《powershell 的版本所引起的加载 FSharp 编译器问题》

首先,我们定义一个函数 Compiler-FSharp,有两个参数,一个是 F#  源代码,当然是必须的;另一个是必须的引用,这是可选的。

然后,调用这个函数。

Function Compiler-FSharp 
([string]
$fSharpCode,[Array]$References)

{

#
判断 Powershell 的版本

$is32=
$PSHOME.Contains("SysWOW64")

$isAMD64= ($env:PROCESSOR_ARCHITECTURE).Contains("AMD64")

#
增加 Path 等

if ($isAMD64)

{

$env:Path=$env:Path+";C:\ProgramFiles
(x86)\Microsoft SDKs\F#\4.0\Framework\v4.0"

Add-Type-Path"C:\ProgramFiles (x86)\ReferenceAssemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll"

if($is32)

{

$ra= "C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll"

}

else

{

$ra= "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll"

}

}

else

{

if($is32)

{

$env:Path=
$env:Path+
";C:\ProgramFiles (x86)\Microsoft SDKs\F#\4.0\Framework\v4.0"

Add-Type-Path"C:\ProgramFiles (x86)\ReferenceAssemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll"

}

else

{

$env:Path=
$env:Path+
";C:\ProgramFiles\Microsoft SDKs\F#\4.0\Framework\v4.0"

Add-Type-Path"C:\ProgramFiles\ReferenceAssemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll"

}

$ra="C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll"

}

if ($references.Count
-ge 1)

{

$ra.AddRange($References)

$references
|  % {
Add-Type -Path
$_ -ErrorAction
SilentlyContinue}

}

#
加载 FSharp.Compiler.CodeDom.dll

Add-Type-Path
C:\FSharpPowerPack-4.0.0.0\bin\FSharp.Compiler.CodeDom.dll

$provider=New-ObjectMicrosoft.FSharp.Compiler.CodeDom.FSharpCodeProvider

$fSharpCode=Get-Content"C:\Users\tmx\Desktop\loop.fs"|
Out-String

$fSharpType=Add-Type
-TypeDefinition$fSharpCode-CodeDomProvider$provider-ReferencedAssemblies$ra-ErrorActionIgnore-PassThru|where
{ $_.IsPublic }

$fSharpType

<#

-CompilerParameters

$cp = New-ObjectSystem.CodeDom.Compiler.CompilerParameters

$cp.CompilerOptions= "--platform:x86"

#>

}

调用 Compiler-FSharp。

Compiler-FSharp $fSharpCode

后面就可以调用在 F# 源代码中定义的函数了,比如:

[Test]::HelloWorld

[Test]::Loop(10)

[Test]::factorial(10)

=========================

附:F# 源代码。

$fSharpCode [email protected]"

module Test

let HelloWorld =

"Hello World!!!!"

printfn "%s" HelloWorld

let rec Loop n =

seq [

if n <= 0 then

()

else

yield n;

yield! Loop (n-1)

] |> Seq.sort

printfn "%A" (Loop 5)

let rec factorial x =

if x = 0 then 1

else x * (factorial (x - 1))

"@

如果,源代码是保存在文件中的,也可以这样:

$fSharpCode= Get-Content"C:\Scripts\TestCompilerFSharp.fs"
|Out-String

初步解决《powershell 的版本所引起的加载 FSharp 编译器问题》

时间: 2024-10-04 23:45:08

初步解决《powershell 的版本所引起的加载 FSharp 编译器问题》的相关文章

《powershell 的版本所引起的加载 FSharp 编译器问题》基本解决

1.FSharp.Core.dll,不光要 Add-Type,还要在编译中引用.但是,在 VS2012 的环境下,就不需要引用,百思不得其解: 2.理顺了大部分系统引用的地址. Function Compiler-FSharp([string] $fSharpCode,[Array]$References) { # 判断 Powershell 的版本 $isAMD64= ($env:PROCESSOR_ARCHITECTURE).Contains( "AMD64" ) $is32= $

powershell 的版本所引起的加载 FSharp 编译器问题

在 64 位的系统下,大部分系统文件都有 64 位和 32 位的版本:通常在C:\WINDOWS\system32 下的是 64 位版本,在 C:\WINDOWS\SysWOW64下的是 32 位版本.比如: 默认情况下,调用的命令多是 64 位,因此,会造成一些问题. 加载 FSharp 编译器,在 32 位系统下没有问题,而同样的程序,在 64 位系统下就编译出错.造成问题的原因应该是 64 位系统下,编译时所引用的基本库的版本未统一所致,即有的是 64 位的,有的是 32 位的. 原因可能

解决“下列引导或系统启动驱动程序无法加载: HWiNFO32 ”

开机出现错误提示,查看事件查看器提示内容:下列引导或系统启动驱动程序无法加载: HWiNFO32 原因: 该系统安装过驱动精灵,卸载驱动精灵后注册表有残余服务键值. 解决办法: 1.打开注册表编辑器,开始--运行--输入regedit--回车 2.依次找到如下两个键值,删除即可: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\HWiNFO32HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\HWi

解决WP程序 重复打开出现 “正在加载...” 字样 解决方案

在开发winphone程序时候 我们经常遇到调试.在调试的时候 可能会重复打开 debug一下.可是有时候 经常遇到 "正在加载...."字样.而且很慢.效率很低. 测试发现 在 返回 程序的时候 条用一下App.Current.Terminate();  重复打开就没事了.各位 可以推测一下具体为啥这么搞就行... ps:没有这种情况的可忽略 protected virtual void BackKeyPress(CancelEventArgs e) {      App.Curre

解决:找不到或无法加载主类

造车错误的原因可能是: 1.环境变量没有配置好 2.javac xx.java打错成java xx.java 环境变量的搭建,你确定你搭建正确了吗?我开始也以为是,呵呵,不够细心啊!PATH=.;%JAVA_HOME%\binCLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\toos.jar;JAVA_HOME=C:\Program Files\Java\jdk1.7.0 注意:PATH.CLASSPATH前面有句点和分号,注意CLASSPAT

【Android】解决RadioButton+FragmentPagerAdapter+Fragment切换页面数据加载的问题

解决RadioButton+FragmentPagerAdapter+Fragment切换页面数据加载的问题

解决在使用gensim.models.word2vec.LineSentence加载语料库时报错 UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte......的问题

在window下使用gemsim.models.word2vec.LineSentence加载中文维基百科语料库(已分词)时报如下错误: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 0: invalid continuation byte 这种编码问题真的很让人头疼,这种问题都是出现在xxx.decode("utf-8")的时候,所以接下来我们来看看gensim中的源码: class Line

解决导航下图片不能按需加载的问题减少对资源请求数量

问题描述:在一个三段式的navbar中,各段下面有一个长图(类似这样的) 在优化之前需要加载三张大图这无疑增加了资源请求数量 因此,我想到了将图片转换为背景以此减少请求没想到方案是可行的,上代码 <div class="page-navbar"> <!-- navbar --> <mt-navbar class="page-part" v-model="selected" swipeable> <mt-t

小技巧:VMware workstation克隆RHEL6.0及以上版本后网卡无法加载问题

休息之余,朋友打电话咨询我有关他们测试环境中多人Linux网卡无法加载问题,呵呵,N久不做Linux,所以具体了解了一下朋友环境:在测试机上懒得自己搭建部署环境,都是通过拷贝已经克隆好RHEL环境,然后在各自环境中使用,正常开机,但是网卡始终配置不上,执行service network restart重启网卡总是加载不上,因不具备截图条件,简单说一下处理方法:1.查看/etc/sysconfig/network-scripts/ifcfg-eth0配置信息: 2.修改字段HWADDR为虚拟机所在