首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修正了build.fsx中“包管理器键paket未注册”的问题

修正了build.fsx中“包管理器键paket未注册”的问题
EN

Stack Overflow用户
提问于 2021-03-16 23:38:25
回答 3查看 937关注 0票数 12

当我在代码中打开假生成脚本时,如下所示:

代码语言:javascript
复制
> dotnet new -i fake-template
> dotnet new fake
> dotnet tool update fake-cli
> code build.fsx

我在编辑器中看到此错误消息,没有定义任何假名称空间、模块或类型:

代码语言:javascript
复制
Package manager key 'paket' was not registered in
c:\Users\wallace.kelly\.vscode\extensions\ionide.ionide-fsharp-5.4.0\bin\
Currently registered: nuget

如何纠正此错误?

运行dotnet fake build很好。该错误刚刚出现在编辑器中。

我的设置文件中有"FSharp.dotNetRoot": "C:\\Program Files\\dotnet\\sdk",。该文件夹包括文件夹2.1.701、2.2.401、3.1.407、5.0.103和5.0.104。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-17 03:13:13

这里是Ionide代码的维护者。从现在开始,错误就会发生。在其版本的FSharp.Compiler.Services中,FAKE落后,没有对该组件的更新,我们与FAKE的集成已经萎缩到编辑器在脚本中显示错误的程度。

有几种解决办法:

  • 继续使用假的,只处理编辑问题。
  • 停止使用假名作为脚本运行程序,但继续使用来自构建项目或“标准”fsx脚本的假库。
  • 使用另一种构建系统
  • 向假代码提供更新(扩展到Ionide中不推荐的代码)

等。

票数 14
EN

Stack Overflow用户

发布于 2022-04-05 18:05:17

我刚刚通过使用ifdef消除了警告。

代码语言:javascript
复制
#if FAKE
#r "paket:
nuget Fake.DotNet.Cli
nuget Fake.IO.FileSystem
nuget Fake.Core.Target //"
#endif
#load ".fake/build.fsx/intellisense.fsx"
open Fake.Core
open Fake.DotNet
open Fake.IO
open Fake.IO.FileSystemOperators
open Fake.IO.Globbing.Operators
open Fake.Core.TargetOperators

Target.initEnvironment ()

Target.create "Clean" (fun _ ->
    !! "src/**/bin"
    ++ "src/**/obj"
    |> Shell.cleanDirs 
)

Target.create "Build" (fun _ ->
    !! "src/**/*.*proj"
    |> Seq.iter (DotNet.build id)
)

Target.create "All" ignore

"Clean"
  ==> "Build"
  ==> "All"

Target.runOrDefault "All"
票数 6
EN

Stack Overflow用户

发布于 2022-08-08 20:34:18

切斯特的回答之后,我选择在构建控制台项目中使用假库。这有时被称为build.fsproj 。实际上,将脚本转换为这种模式非常简单,而且我发现调试和工具支持要好得多。不幸的是,在编写本报告时,还没有这种模式的正式文档。

从本质上说,你需要:

  • 创建一个新的fsharp控制台项目(build.fsproj)
  • 将现有的构建脚本放到项目中(build.fs)
  • 使用paket或nuget在项目中包括您的依赖项
  • 在脚本中添加一个[<EntryPoint>]
  • 使用dotnet run调用您的项目。可能来自build.cmdbuild.sh文件

我发现最好的例子是:

最后,我包括了来自SAFE的helper.fs文件,因为它使转换变得非常容易。基本上,脚本的结尾是:

代码语言:javascript
复制
//
// Existing FAKE script open library calls go here
//

open Helpers
initializeContext()

//
// Existing FAKE script body goes here
//

[<EntryPoint>]
let main args = runOrDefault args

MiniScaffold有很好的build.cmdbuild.sh脚本。这是build.cmd

代码语言:javascript
复制
echo Restoring dotnet tools...
dotnet tool restore

dotnet run --project ./build/build.fsproj -- -t %*

如果您有一个使用环境变量的现有脚本,那么-- -t %*部分是超级的。

我第一次看到了这条推特中提到的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66665009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档