黑客引用的程序集

NoI*_*his 4 f# assemblies

我知道关于这个主题还有其他问题,例如:

..但是,嘿,我是F#的新手,但仍然没有得到它.

我有一个F#project(thelibrary),它包含一些模块.该项目在解决方案资源管理器中引用了所有必需的库.每个.fs文件都会打开模块中使用的库.F#项目编译正确.

然后我有另一个包含脚本的F#项目.我引用thelibrarythelibrary自己使用的库.在脚本中,我引用#r了dll thelibrary以及所使用的所有库thelibrary.然后open是我所有的模块.Intellisense说在我执行脚本之前一切都很好.

该脚本返回错误:

error FS0074: The type referenced through 'Fmat.Numerics.Matrix`2' is defined in an assembly that is not referenced. You must add a reference to assembly 'Fmat.Numerics'.
Run Code Online (Sandbox Code Playgroud)

破解这个问题的程序是什么?我该如何从那里出发?我感兴趣的是这个特定问题的解决方案,但同样,一个菜谱配方来解决这类问题,这对我来说是一个令人沮丧的原因.

谢谢.

Tom*_*cek 6

在这种情况下,F#Interactive的行为可能有点奇怪.通常,我认为当您使用#I在分辨率上下文中包含引用程序集的路径然后使用名称引用库时,事情会更好#r.因此,如果您Fmat.Numerics.dll在一个文件夹中有一个库C:\libs并且它引用了另一个库,another.dll那么您可以:

#I "C:\\libs"
#r "another.dll"
#r "Fmat.Numerics.dll`
Run Code Online (Sandbox Code Playgroud)

第一行意味着F#Interactive将自动查看包含库的文件夹(这也可以是脚本位置的相对路径) - 因此,接下来的两行只能通过文件名引用库.


hal*_*cwb 5

这仍然是个问题.我还可以重现并修复问题,如下所示:

我有三个项目:

  1. Informedica.Settings.Library
  2. Informedica.Settings.Services.Interfaces
  3. Informedica.Settings.Services.Models

项目2使用项目1和项目3.项目1使用项目3.

当我按顺序加载引用时(第一个proj 3然后是proj 1):

#r @"..\..\Informedica.Settings.Services.Models\bin\Release\Informedica.Settings.Services.Models.dll"
#r @"..\..\Informedica.Settings.Library\bin\Release\Informedica.Settings.Library.dll"
Run Code Online (Sandbox Code Playgroud)

一切正常.不幸的是,当我使用VS2013发送对fsi的引用或使用新的电动工具生成引用选项时,顺序是:

#r @"..\..\Informedica.Settings.Library\bin\Release\Informedica.Settings.Library.dll"
#r @"..\..\Informedica.Settings.Services.Models\bin\Release\Informedica.Settings.Services.Models.dll"
Run Code Online (Sandbox Code Playgroud)

这将导致FS0074错误.显然,因为Services.Models中的一个类型在Settings.Library中使用,并且引用顺序相反,所以fsi无法处理此问题.更正引用顺序可以解决问题.