ProjectCracker 与 .netstandard 2.0 项目

2024-05-05

我的团队最近从使用 .net 框架转向使用 .net 标准 2.0 作为我们的 F# 库。我们有一些在项目上运行的内部脚本来自动生成 Markdown 文档,这些脚本使用 F# 编译器服务 SDK 来分析代码并检索类型元数据、文档注释等。

我们正在使用FSharp.Compiler.Service.ProjectCracker图书馆阅读我们的.fsproj文件并生成FSharpProjectOptions运行时使用的实例FSharpChecker.ParseAndCheckFileInProject方法。但是,对于.net标准项目,我们在调用时会收到以下错误ProjectCracker.GetProjectOptionsFromProjectFile:

System.Exception: Could not load project Example.fsproj in ProjectCollection. 
Available tools: 
["C:\Program Files (x86)\MSBuild\12.0\bin\amd64";
 "C:\Program Files (x86)\MSBuild\14.0\bin\amd64";
 "C:\Windows\Microsoft.NET\Framework64\v2.0.50727";
 "C:\Windows\Microsoft.NET\Framework64\v3.5";
 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319"]. 

Message: The default XML namespace of the project must be the MSBuild XML namespace. 
If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. 
If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.```

有没有办法使用 Project Cracker 库读取 .net 标准项目文件,或者我们需要手动解析文件并创建FSharpProjectOptions为我们的新图书馆手工制作?


标准 ProjectCracker 包似乎无法用于读取 .netstandard 项目文件。但是,已经有一个 NuGet 包可用于提供此功能,Dotnet.ProjInfo https://github.com/enricosada/dotnet-proj-info/tree/master/examples。该项目允许您读取 .NET 项目文件的所有变体,包括 .NET Framework 和 .NET Core,以及 project.json 和 .csproj/.fsproj 文件。

该项目作为 API 的记录不是非常好(该文档对于命令行工具来说更好),但是该工具的编程用法可以在FsAutoComplete 库 https://github.com/fsharp/FsAutoComplete.

对于 .netstandard 项目,您可以使用getProjectInfos函数,就像这样:

let getProjectInfo additionalMSBuildProps file =
    let projDir = Path.GetDirectoryName file
    let additionalInfo = 
            [ "OutputType"
              "IsTestProject"
              "Configuration"
              "IsPackable"
              MSBuildKnownProperties.TargetFramework
              "TargetFrameworkIdentifier"
              "TargetFrameworkVersion"
              "MSBuildAllProjects"
              "ProjectAssetsFile"
              "RestoreSuccess"
              "Configurations"
              "TargetFrameworks"
              "RunArguments"
              "RunCommand"
              "IsPublishable"
            ]

    let loggedMessages = System.Collections.Concurrent.ConcurrentQueue<string>()
    let msBuildExec = Dotnet.ProjInfo.Inspect.msbuild (Dotnet.ProjInfo.Inspect.MSBuildExePath.DotnetMsbuild "dotnet") (fun exePath args -> Utils.runProcess loggedMessages.Enqueue projDir exePath (args |> String.concat " "))
    let gp () = Dotnet.ProjInfo.Inspect.getProperties (["TargetPath"; "IsCrossTargetingBuild"; "TargetFrameworks"] @ additionalInfo)

    let additionalArgs = additionalMSBuildProps |> List.map (Dotnet.ProjInfo.Inspect.MSBuild.MSbuildCli.Property)

    let cliList = [Dotnet.ProjInfo.Inspect.getFscArgs; Dotnet.ProjInfo.Inspect.getResolvedP2PRefs; gp]

    file |> Dotnet.ProjInfo.Inspect.getProjectInfos loggedMessages.Enqueue msBuildExec cliList additionalArgs
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ProjectCracker 与 .netstandard 2.0 项目 的相关文章

  • 双前向/后向管道操作符是否有记录?

    我记得读过有关双管道运算符的内容 gt 和 Example let print a b sprintf O O a b 1 2 gt print val it string 1 2 双 向前 向后 管道运算符记录在以下列表中MSDN 上的
  • F#、FParsec 和递归调用流解析器(第二次)

    感谢您的回复我的第一篇文章 https stackoverflow com questions 26853718 f fparsec and calling a stream parser recursively and 我的第二篇文章 h
  • 绘图 Deedle 框架

    我有以下代码 let mychart frame GetAllSeries gt Seq iter fun key value gt Chart Line value Name key gt Chart Combine where fram
  • FParsec:如何组合解析器以便它们以任意顺序匹配

    任务是找到特定的键值对并解析它们 这些对可以按任何顺序出现 我的部分工作尝试 open FParsec type Parser lt a gt Parser lt a unit gt type Status Running Done typ
  • 如何判断 F# 函数是否是纯函数?

    假设我有这两个 F 函数 let sq x x x let tm DateTime Now 显然 sq 是纯的 因为它对于给定的输入总是返回相同的值 而 tm 是不纯的 因为每次调用它时都会返回不同的值 一般来说 有没有一种方法可以确定 F
  • 类型不包含“GetProperties”的定义

    我正在将库项目迁移到 net 标准 当我尝试使用System Reflection调用APIType GetProperties 类型不包含 GetProperties 的定义 这是我的project json version 1 0 0
  • 我缺少什么:可以使用多个参数进行函数组合吗?

    我了解 F 中函数组合的基础知识 例如所述here http blogs msdn com b chrsmith archive 2008 06 14 function composition aspx 不过 也许我错过了一些东西 这 gt
  • docs.microsoft.com 上的 .NET 平台扩展是什么?

    Microsoft Docs 中有一个框架级导航元素 称为 NET 平台扩展 https learn microsoft com en us dotnet api index view dotnet plat ext 2 1 它包含有关最近
  • 如何在 F# 中将对象转换为泛型类型列表

    在下面的代码片段中 我的目的是将 System Object 可能是 FSharpList 转换为它所持有的任何泛型类型的列表 match o with list lt gt gt addChildList o gt list lt gt
  • 通用高阶函数

    当我将泛型函数作为本地值传递时 但在作为参数传递时却不能使用具有不同类型参数的泛型函数时 是否有原因 例如 let f id let g x y f x f y g 1 2 工作正常 但如果我尝试将函数作为参数传递 let g f x y
  • 如何在 F# 中捕获任何异常(System.Exception)而不发出警告?

    我试图捕获异常 但编译器给出警告 此类型测试或向下转型将始终保持 let testFail try printfn Ready for failing failwith Fails with System ArgumentException
  • 当两个模式共享“when”子句时,模式匹配不完整

    A 共同的惊喜 https stackoverflow com q 18691622 2314532对于 F 初学者来说 以下事实是不完全匹配 let x y 5 10 match something with when x lt y gt
  • 将属性应用于返回值 - 在 F# 中

    在 C 中 可以将属性应用于方法的返回 return DynamicAttribute public object Xyz return new ExpandoObject 这在 F 中可能吗 背景 我想要一个用 F 编写的库的方法 该方法
  • 在 Deedle 系列中算得上独一无二

    我想对我的数据框中的系列有一个概述 例如 pandas 的唯一值计数 我不知道是否有内置函数可以实现这一点 到目前为止 我已经完成了一个函数来获取不同特征的数量 我可以设法完成这项工作 我的问题只是关于内置功能 let unique s D
  • 在 F# 类型提供程序中发出生成的类型

    我创建了一个简单的生成类型提供程序 它采用重新组织类型的程序集的路径 将它们置于类型提供程序命名空间下 如果您愿意 可以说是内部化 相关代码的链接在这里https github com colinbull Playground https
  • 将 F# 类型保存到数据库

    A lot http gorodinski com blog 2013 02 17 domain driven design with fsharp and eventstore f 文章数推荐 http fsharpforfunandpr
  • F# 命名约定

    F 是否有 官方 命名 大小写约定 我总是怀疑是否使用 C 风格 Class MyFunctionName or Module my function name 在 F 中 您应该混合 BCL 类和 F 库类 它们具有不同的大小写 并且代码
  • 使用不区分大小写的比较从集合中减去记录

    我有一组记录 type Person Name string Age int let oldPeople set Name The Doctor Age 1500 Name Yoda Age 900 与上面的硬编码示例不同 这组数据实际上来
  • 带表达式的 F# 类型定义

    是否可以这样表达 type id int gt 0 我知道它不可能静态执行 因为这意味着 F 具有依赖类型 在 C 中 我习惯于使用代码契约来执行此类操作并获得运行时强制执行 我正在这里寻找类似的东西 Thanks 编辑 感谢您提供的所有答
  • 像 Javascript 对象一样循环遍历 F# 记录

    在 javascript 中 我可以使用简单的 for 循环访问对象的每个属性 如下所示 var myObj x 1 y 2 var i sum 0 for i in myObj sum sum myObj i 我想知道我是否可以用 F 做

随机推荐

  • 重复符号_OBJC_CLASS_$_LoginController

    我知道这个问题以前已经被问过很多次了 但到目前为止还没有解决我的问题 我知道当您在项目中获得文件的多个副本时 会发生此错误 我尝试清理构建 删除任何登录控制器 m文件输入编译源然后构建 很好 没有错误 当我在编译源中添加 LoginCont
  • 控制台界面教程和提示 (pdcurses)

    我正在寻找有关使用 PDCurses 库的教程 不幸的是 只有文本文档 这更像是函数参考 pdcurses 是否与 ncurses 足够相似以使用 ncurses 教程 关于制作控制台 UI 的任何提示 附言 PDCurses mingw3
  • Vagrant - Homestead 设置多个站点

    我已经使用 homestead yaml 映射了文件夹等 ip 192 168 10 10 folders map Users User Desktop folder Homestead First to home vagrant Firs
  • 使用EF Core调用存储过程并关闭连接

    我有一个使用 EF Core 的 ASP NET Core 2 2 应用程序 我有一个服务类 通常使用DbContext用于任何 CRUD 操作 然而 在其中一种方法中 Assign下面的方法 我需要使用存储过程 所以我使用以下代码 注意D
  • 在重复键上仅更新 Null 或空值

    我有一个 mysql 查询来合并主键 IMO 上的两个表 查询工作正常 但我遇到的问题是在重复键更新时 我只想更新 wp second 表的那些没有值的字段 简而言之 在重复键上 wp second 值仅应在 null 或空时更新 这是我到
  • polyfit numpy 的反向输出

    我使用了 numpy 的 polyfit 并获得了两个数组 x 和 y 的非常好的拟合 使用七阶多项式 我的关系是这样的 y x p 0 x 7 p 1 x 6 p 2 x 5 p 3 x 4 p 4 x 3 p 5 x 2 p 6 x 1
  • UCM 中的复合基线是什么以及何时使用它?

    UCM 中的综合基线是什么 什么时候会用到 主要是当我们有多个组件的时候才会使用它吗 关于 复合基线 的参考文献是 在 UCM 中使用复合基线的最佳实践 http www ibm com developerworks rational li
  • 在 pandas dataframe python 列中搜索单词

    我有两个文本列 我想查找一列中的单词是否存在于另一列中 我编写了下面的代码 它运行得很好 但它会检测字符串中的任何位置是否存在单词 例如 它将在 ham 中查找 ha 我想改用正则表达式 但我被困住了 我遇到了这个post https st
  • bash 用变量值替换字符串中的变量名

    这有点奇怪 我有以下字符串 我有一个名为 REDIRECT 的变量设置为 https working MYDOMAIN blah blah 我需要将 MYDOMAIN 替换为分配给 MYDOMAIN 的变量的实际值 不确定 bash 还是
  • Java机器学习库可以商用吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道我可以将其用于商业产品的优秀 Java 机器学习库吗 不幸的是 Weka 和 Rapidmin
  • 验证远程图像实际上是 ruby​​ 中的图像文件?

    我试图弄清楚如何验证我输入载波的内容实际上是图像 我获取图像网址的来源并没有返回所有实时网址 有些图像已不复存在 不幸的是 它并没有真正返回正确的状态代码或任何内容 因为我正在使用一些代码来检查远程文件是否存在并且它通过了该检查 因此 现在
  • 使用 Apache Batik 将 SVG 图像转换为 JPEG 图像

    我正在尝试将 SVG 图像转换为 JPEG 如下所示https xmlgraphics apache org batik using transcoder html createImage https xmlgraphics apache
  • res.redirect 不会重定向 Node/Express.js

    我正在为我的 web 应用程序使用 Express 并检查会话中是否存在某些值 将用户重定向到 Instagram 登录页面 但在控制台中我不断收到 302 代码 并且浏览器不会重定向用户 这是我的代码 我正在使用 Ajax 发送我的请求
  • 如何将子记录添加到现有父记录中?

    我一直在 Google 和 Stack Overflow 上搜索有关这个主题的某种提示 但信息充其量是分散的 我正在尝试创建一个新的子记录 Comment 并将其保存到现有的父记录 Post 我使用的是 Ember Model 而不是 Em
  • 使用 JSON 将 iTunes 中的图像解析为 tableviewcontroller

    我正在尝试从中解析数据数据源 http ax itunes apple com WebObjects MZStoreServices woa ws RSS topsongs limit 30 json 标题已正确解析并显示 但解析图像时出现
  • Wordpress 数组显示特定类别的帖子并显示帖子摘录和功能

    大家好 正在寻找 WordPress 帮助 我需要放置一个简单的查询 数组来显示来自某只猫的帖子 例如 新闻 其中将包含帖子特色图像 有人可以帮忙吗 Gary Try this a href title a
  • ES6 Promise 返回值的执行顺序

    尝试了解 ES6 Promise 的执行顺序 我注意到链式处理程序的执行顺序受到前一个处理程序返回值还是 Promise 的影响 Example let a Promise resolve a then v gt Promise resol
  • 无法启动redis.service:单元redis-server.service被屏蔽

    我在 ubuntu 16 04 上安装了 Redis 服务器 但是当我尝试使用启动redis服务时 sudo systemctl start redis 我收到消息 Failed to start redis service Unit re
  • 使用 findAll 时 Yii AR join 不起作用

    我有两张桌子menus and lang menus My Menus模型如下 public function relations NOTE you may need to adjust the relation name and the
  • ProjectCracker 与 .netstandard 2.0 项目

    我的团队最近从使用 net 框架转向使用 net 标准 2 0 作为我们的 F 库 我们有一些在项目上运行的内部脚本来自动生成 Markdown 文档 这些脚本使用 F 编译器服务 SDK 来分析代码并检索类型元数据 文档注释等 我们正在使