为什么Paket默认安装比Nuget更多的包?这是正常的行为还是我做错了什么?
我按照入门指南(但在paket.powershell我安装的帮助下choco install paket.powershell):
Paket使用Paket-Init命令初始化nuget reactiveui到paket.dependencies文件Paket-Install命令下载包结果我在我的packages文件夹中有以下内容:
reactiveui
reactiveui-core
Rx-Core
Rx-Interfaces
Rx-Linq
Rx-Main
Rx-PlatformServices
Rx-WindowStoreApps
Rx-WinRT
Rx-Xaml
Splat
System.Collections
System.Diagnostics.Debug
System.Diagnostics.Tools
System.IO
System.Linq
System.Linq.Expressions
System.ObjectModel
System.Reflection
System.Reflection.Extensions
System.Runtime
System.Runtime.Extensions
System.Runtime.InteropServices.WindowsRuntime
System.Runtime.Serialization.Primitives
System.Runtime.Serialization.Xml
System.Text.Encoding
System.Threading
System.Threading.Tasks
Run Code Online (Sandbox Code Playgroud)
在Install-Package reactiveuiVS Package Manager控制台中使用基于nuget的标准时,我有:
reactiveui-core.7.0.0
reactiveui.7.0.0
Rx-Core.2.2.5
Rx-Interfaces.2.2.5
Rx-Linq.2.2.5
Rx-Main.2.2.5
Rx-PlatformServices.2.2.5
Rx-XAML.2.2.5
Splat.1.6.0
Run Code Online (Sandbox Code Playgroud)
第一个结果非常分散所有这些依赖关系.或者它应该如何?我觉得我错过了一些额外的限制/限制参数......
我在Nuget Package Manager Console中安装了nuget的paket:
安装包装paket
然后我试着跑paket convert-from-nuget.它在用户提示符上停滞不前(它不允许我输入包管理器控制台).我的下一个想法是从命令行运行它,但是没有记录如何执行此操作.
只需paket convert-from-nuget输入标准的dev命令提示符就会出现错误,说"paket"无法识别.
如何从命令行或powershell运行paket,以及如何指定要使用哪种解决方案?
我是一名习惯于Maven和Gradle的Java开发人员,现在进入.NET并尝试了解Paket.根据我的理解,Paket有三个不同的文件支持.NET解决方案的依赖管理:
使用Maven和Gradle,我习惯在一个文件中指定我的依赖项.我可以指定确切的版本,并确保后续依赖的下载将是相同的.为什么Paket需要三个文件?我希望每个项目中的paket.references文件就足够了.在.NET世界中是如何管理依赖关系的一些问题或怪癖我不知道需要这三个文件?
我已经将Argu添加到我的项目中,并且随之下载了大约700MB的包.这与Paket安装额外的软件包有关,但是我想要解决使用> =或者只是框架:net46来规定框架限制的细微差别.
在我第一次尝试时,我刚刚将Argu添加到paket.dependencies文件中:
nuget Argu
因为这导致了几乎一GB的软件包下载,我问:
.\.paket\paket.exe why nuget System.Threading.Thread
而paket回答说:
Paket version 3.27.02
NuGet System.Threading.Thread is a transitive dependency.
It's a part of following dependency chains:
-> Argu
-> FSharp.Core
-> System.Threading.Thread
-> MathNet.Numerics.FSharp
-> FSharp.Core
-> System.Threading.Thread
0 seconds - ready.
Run Code Online (Sandbox Code Playgroud)
然后我向paket.dependencies添加了以下限制:
nuget Argu framework: >= net46
然而,这导致下载相同的包.
最后我做了:
nuget Argu framework: net46
而这个特定的限制确实删除了所有不必要的包:
Garbage collecting Microsoft.NETCore.Platforms
Garbage collecting Microsoft.Win32.Primitives
Garbage collecting NETStandard.Library
Garbage collecting System.AppContext
Garbage collecting System.Collections.Concurrent
...
Run Code Online (Sandbox Code Playgroud)
但是我的所有其他依赖项都是这样指定的(主要是因为,但并不总是,因为我正在解决原始问题):
source …Run Code Online (Sandbox Code Playgroud) 我的 paket.dependencies 文件中有一个 TFS git 存储库:
git http://mytfs1server:8080/tfs/2015Projects/_git/DEV-Commons
使用该存储库,有一个文件“src/Tools.fs”
在 paket.references 文件中,我如何告诉 Paket 添加对该 git 存储库中文件的引用,以便 Paket 可以将其添加到 fsproj 文件中?
我有一个解决方案,其中主要是F#的.NET Framework项目,然后是C#的几个。我使用Paket而不是NuGet进行数据包管理。现在,我已经向该解决方案添加了我的第一个.NET Standard 2.0库。
当我运行构建脚本时,该脚本运行另一个构建脚本,该脚本调用devenv进行编译,但出现错误,指出该项目的obj \ project.assets.json文件丢失。它实际上是在编译时生成的,但前提是要编译其他项目之一。为什么然后将其报告为缺失有点奇怪。
如果我只运行内部脚本,那没有问题。如果我打开VS并进行编译,那没有问题。滑稽。
我不太确定这些东西是如何工作的-否。但是在谷歌搜索之后,似乎应该在使用devenv(Visual Studio)进行编译之前将该文件放置在此处,而不是使用devenv放置在此处。
我运行了Paket恢复。那并没有产生丢失的project.assets.json。
我用谷歌搜索了“恢复dotnet”。运行此命令时,在一些较旧的项目中出现此错误。
MSB4020: The value "" of the "Project" attribute in element <Import> is invalid.
Run Code Online (Sandbox Code Playgroud)
所以问题是,我现在该怎么办?
我的大多数开发都是在Java中,我习惯于使用运行时,编译器和构建工具.所以现在我正试图进入.NET世界,特别是使用VSCode,Ionide插件和F#来构建一个F#程序.我很难理解与Java构建过程的直接比较.到目前为止,这是我的粗略理解:
<build>pom.xml中的maven 部分?<dependencies>pom.xml中的maven 部分?我对*proj文件感到困惑.我认为这与MSBuild有关.但我很困惑,因为我认为FAKE是MSBuild的替换,但我见过的一些FAKE例子引用了这个文件并将其传递给MSBuildRelease任务.
另外,为什么paket需要依赖项和引用文件?
我希望有人能够确认,澄清,添加或者上述任何一项,到目前为止我的理解水平.非常感激!
我知道这个问题很复杂,而且不是很具体.谢谢大家花时间去除它并回答你的能力.我很感激.
我正在编写一个类型提供程序,允许用户向其提供配置文件.我使用TP的内部配置对象来识别ResolutionFolder,我用它来获取配置文件的完全限定路径.大.
但是,在使用脚本时,我使用Paket的自动生成的加载脚本来加载我的依赖项.文件路径如下所示: -
.paket
|--.load
| |-- net452
| |-- main.group.fsx
|--src
|-- myscript.fsx
|-- config.json
Run Code Online (Sandbox Code Playgroud)
myscript.fsx包含我的脚本代码.config.json包含我将在脚本中创建的类型提供程序实例的配置.
在内部myscript.fsx我调用#load "..\.paket\.load\net452\main.group.fsx" 加载所有依赖项(包括我的TP本身),它工作正常.
然而
然后,当我尝试在脚本中进一步初始化类型提供程序时: -
type MyTPInstance = MyTp<myConfig = "config.json">
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,我的TP捕获并显示: -
The type provider reported an error: Unable to locate config file
"C:\Users\Isaac\Source\Repos\myRepo\.paket\load\net452\config.json"
Run Code Online (Sandbox Code Playgroud)
换句话说 - 看起来因为我从生活在另一个文件夹中的脚本引用了我的TP程序集,这是 FSI用作解析文件夹的文件夹 - 而不是正在运行的脚本的文件夹.我可以证明,这是问题,因为如果我的内容复制main.group.fsx到myscript.fsx直接(固定的路径,我当然包),这一切工作正常.
我怎样才能解决这个问题?其他人如何解决这个问题?
paket ×8
f# ×6
.net ×2
c# ×2
maven ×2
.net-core ×1
build ×1
command-line ×1
f#-fake ×1
f#-scripting ×1
java ×1
nuget ×1
powershell ×1