《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= $PSHOME.Contains("SysWOW64"
)

$ra= New-Object Collections.ArrayList

# 增加 Path for FSC.exe

$FscPath= @("C:\ProgramFiles\Microsoft SDKs\F#\2.0\Framework\v4.0";

"C:\ProgramFiles\Microsoft SDKs\F#\3.0\Framework\v4.0";

"C:\ProgramFiles\Microsoft SDKs\F#\3.1\Framework\v4.0";

"C:\ProgramFiles\Microsoft SDKs\F#\4.0\Framework\v4.0";

"C:\ProgramFiles (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0";

"C:\ProgramFiles (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0";

"C:\ProgramFiles (x86)\Microsoft SDKs\F#\3.1\Framework\v4.0";

"C:\ProgramFiles (x86)\Microsoft SDKs\F#\4.0\Framework\v4.0";

)

$FscPath| % {
if (Test-Path
$_)
{ $env:Path =
$env:Path+ ";" +
$_  } }

if ($isAMD64)

{

$FSharpCorePath= @(

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

)

if ($is32)

{

$mscorlibPath= @(

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

)

}

else

{

$mscorlibPath= @(

"C:\ProgramFiles (x86)\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll"

)

}

}

else

{

if ($is32)

{

$FSharpCorePath= @(

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

)

$mscorlibPath= @(

"C:\ProgramFiles (x86)\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll";

"C:\ProgramFiles (x86)\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client5\mscorlib.dll"

)

}

else

{

$FSharpCorePath= @(

"C:\ProgramFiles\ReferenceAssemblies\Microsoft\FSharp\3.0\Runtime\v4.0\FSharp.Core.dll";

"C:\ProgramFiles\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll";

)

$mscorlibPath= @(

"C:\ProgramFiles\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v3.0\mscorlib.dll"

"C:\ProgramFiles\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v3.5\mscorlib.dll"

"C:\ProgramFiles\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll"

"C:\ProgramFiles\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll"

)

}

}

$FSharpCorePath| %
{ if(Test-Path(
$_ ))
{ Add-Type -Path
$_ }
}

$ra.AddRange( @(
$mscorlibPath  | ?
{ Test-Path(
$_ )
} | Select-Object -First1
) )

$ra.AddRange( @(
$FSharpCorePath | ?
{Test-Path($_
) } |
Select-Object -First

1 )
)

if ($references.Count-ge
1)

{

$ra.AddRange($References)

$references|  %
{ if(Test-Path(
$_ ))
{ Add-Type -Path$_
} else{
Add-Type -AssemblyName
$_}
}

}

# 加载 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

<#

如果要使用-CompilerParameters

-ReferencedAssemblies 不能同时使用

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

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

#>

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

$fSharpType

}

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

######################

# FSharp.Data

######################

$fSharpCode = Get-Content"$env:USERPROFILE\Desktop\Data.fs" |
Out-String

$references = @("C:\FSharp.Data\bin\FSharp.Data.dll")

Compiler-FSharp
$fSharpCode $references

[Test]::http("http://www.baidu.com").Body.item

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

Data.fs:

module Test

open FSharp.Data

//open FSharp.Net

// FSharp.Data 新版本中所有的函数全部归到 Data 命名空间下了。

let http (url:string) = Http.Request url

《powershell 的版本所引起的加载 FSharp 编译器问题》基本解决,布布扣,bubuko.com

时间: 2024-10-31 07:50:48

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

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

首先,我们定义一个函数 Compiler-FSharp,有两个参数,一个是 F#  源代码,当然是必须的:另一个是必须的引用,这是可选的. 然后,调用这个函数. Function Compiler-FSharp  ([string] $fSharpCode,[Array]$References) { # 判断 Powershell 的版本 $is32= $PSHOME.Contains("SysWOW64") $isAMD64= ($env:PROCESSOR_ARCHITECTURE

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

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

vs2012打开低版本项目时 出现vs2012警告未能加载包“visual c++ package 解决办法

vs2012 打开 vs2010 项目时 提示的 错误信息. 解决办法 是下载一个 vs2012的 一个补丁包 http://www.microsoft.com/en-us/download/details.aspx?id=36020 初次安装成功后,调试 无法启用,关闭,重新打开项目 即可解决! ======ok. [在此谢谢网上提供解决方案的朋友们,谢谢你们!] vs2012打开低版本项目时 出现vs2012警告未能加载包"visual c++ package 解决办法

win8和win7下解决php5.3和5.4、5.5等不能加载php_curl.dll的终极解决办法 收藏

win8和win7下解决php5.3和5.4.5.5等不能加载php_curl.dll的终极解决办法 收藏2015年01月11日 最近分别在WIN7和Windows8 上分别安装php 高版本!都遇到了这个问题! 一.win7系统32位, apache2.2, php5.2升级到5.4. 这个比较容易: 1. phpinfo发现没有加载curl; 2. 在php.ini中设置extension_dir 指向e:\php5.4\ext; 部分php扩展加载了, 但curl仍不行. 3. 设置win

webbrowser加载地图网页出现脚本错误解决

对于这个问题,我整整花了一上午的时间来解决,网上关于此问题的解决几乎找不到,于是我就尽可以能的从网上相关问题的答案中获取些灵感,功夫不负有心人,最终通过这些灵感的积累我终于解决了此问题. 首先让我们先来看看出现的问题,为了看到脚本错误,我先把 webBrowser1.ScriptErrorsSuppressed = true; 隐藏掉,错误如下图所示: 对于此错误,我的第一反应是因jquery.min.js书写不规范导致,但看了一下并未错误,回头想了一下,这种可能性比较小,于是排除了此情况. 我

ViewPage+frament不预加载下一个Frament数据解决办法

在做一个ViewPage+Frament 滑动数效果,当滑动到每一页时加载哪一页的数据,但是ViewPage会预加载下一也数据,这个问题之前做项目是一直未解决,今天找到一个方法一下子就解决的这个问题,Frament里面有一个setUserVisibleHint方法,setUserVisibleHint每次fragment显示与隐藏都会调用,下面说一下这个方法的使用 @Override public void setUserVisibleHint(boolean isVisibleToUser)

管理员登录系统后,却加载为TEMP用户的解决办法

win2008R2登录时要加载用户资料.可能是因为不能加载临时换成temp用户. 此时原来的Profile的文档并未丢失,只是以另一个用户登陆系统而已.但是需要同时注意的是,那也就意味着你做的任何变更,增加文件,更改背景等都将在注销后失效,不会保存. 遇到这个问题,可以尝试下先重启电脑,如果无法解决,可以根据以下步骤修改注册表. 1. 备份注册表2. 使用别的管理员账号登陆系统(并不是发生问题的那个)3. 如果用户Profile文件夹仍然存在,备份该Profile文件夹,然后删除.(Profil

android listview 异步加载图片并防止错位 解决办法

网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertView 但没有异步操作也不会有问题. 我简单分析一下: 当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView. 当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Ite

基于.NET框架版本在Windbg中加载sos的脚本

我经常在windbg中调试.netframeworkv2.0/v 4.0代码.在v 2.0中,主clr dll称为“mscorwks.dll”,在v 4.0中称为“clr.dll”.很多人都知道,要在v 2.0中加载sos,我们必须输入“.loadby sos mscorwks”,在v 4.0中输入“.loadby sos clr”.这对我来说是一种痛苦.提出了一个基于clr版本自动加载sos的脚本 !for_each_module .if(($sicmp( “@#ModuleName” , “