gpt4 book ai didi

F#/C# - fsx 脚本文件和项目引用

转载 作者:行者123 更新时间:2023-12-04 05:34:52 25 4
gpt4 key购买 nike

您有一个包含一个 C# 项目的解决方案。 SomeComp.Framework 就是这个名字。
您将 F# 项目添加到解决方案中。您在 F# 项目中引用 SomeComp.Framework 项目。您将脚本文件 - test.fsx 插入到 F# 项目中。在脚本文件中引用 C# 程序集的正确方法是什么?

#r "SomeComp.Framework.dll" // doesn't work

有没有办法在不硬编码路径的情况下做到这一点?
.fsx 文件是否从位于 F# 项目中获得任何设置/属性?

最佳答案

不,它不会从项目中获取任何设置,您必须对路径进行硬编码。 (这是我们将在 future 版本中改进的场景。)也要注意“调试”与“发布”路径。

编辑

好吧,哇,我想出了一些有用的东西:

#r "EnvDTE"
#r "EnvDTE80"
#r "VSLangProj"

let appObj = System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE") :?> EnvDTE80.DTE2
let solnDir = System.IO.Path.GetDirectoryName(appObj.Solution.FileName)
let cfg = appObj.Solution.SolutionBuild.ActiveConfiguration.Name
let libraryDLLPath = System.IO.Path.Combine
[| solnDir; "Library1"; "bin"; cfg |]

//#r libraryDLL // illegal, since #r takes a string literal, but...

let props = appObj.Properties("F# Tools", "F# Interactive")
let cla = props.Item("FsiCommandLineArgs")
cla.Value <- sprintf "--optimize -I:\"%s\"" libraryDLLPath

appObj.ExecuteCommand("View.F#Interactive", "")
appObj.ExecuteCommand("OtherContextMenus.FSIConsoleContext.ResetSession", "")

#r "Library1.dll"

将其作为两个片段执行,首先是除最后一行之外的所有内容,最后是最后一行。它基本上会更改您在 VS 中的 FSI 设置并重置 session ,因此随后您只需 #r "MyLibrary.dll"没有路径。

这是一个巨大的黑客,但似乎有些人可能会发现它很有用,所以我分享它。

关于F#/C# - fsx 脚本文件和项目引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com