从csx脚本中引用NuGet包

12

我正在尝试编写一个使用NuGet包的C#交互式脚本(.csx),但似乎我忽略了一些基本的东西,因为我无法使它工作。

我尝试添加一个project.json文件来引用这个包,当我运行nuget restore后,它被安装到全局包目录中,但似乎#r指令没有在那里查找。我没有找到相关文档介绍#r指令的工作原理(大多数文档似乎处理名为ScriptCS的类似但不同的项目)。

如何编写一个引用NuGet包的csx脚本?


请在UserVoice上为此功能投票:允许从csx加载NuGet程序集 - Liero
5个回答

16

当 .Net Core 成为主流技术时,我们转向使用 Docker,问题迎刃而解。 - Krumelur
将此标记为答案,因为这是第一个正确的答案。 - Krumelur

6

C#互动窗口无法引用NuGet包,但是scriptcs可以。


谢谢!我怀疑这是事实,但我找不到任何好的来源。你是如何发现这一点的? - Krumelur
我知道scriptcs,但目前还不确定是否引入新的非NuGet依赖。 - Krumelur
我知道scriptcs并尝试过它。最后一次尝试时,它正在运行C#脚本的beta版本,并且没有C# 6的所有好处。 - Paulo Morgado
“引入新的非NuGet依赖项”是什么意思?scriptcs有点像运行时,而不是库。要使用csi(C#交互式命令行版本),您需要安装构建工具或Visual Studio。 - Paulo Morgado
Visual Studio 2015已经是一个依赖关系。我尽量减少依赖关系的数量。每个奇怪的所需工具都会增加设置新开发机器的复杂性,这必须与编写脚本的复杂性进行权衡。例如,CSI和PowerShell已经存在。 - Krumelur
我理解你的观点。我的个人看法是,微软的实现已经完全完成了,而 Scriptcs 将会不断发展。 - Paulo Morgado

4
这个wiki页面提到了在使用交互式窗口时需要直接引用NuGet DLL。因此,您可以在全局包目录中使用DLL的绝对路径。虽然不是最理想的方法,但应该能够正常工作。

但那是针对VS中的交互式窗口,而不是独立的CLI运行器,对吧? - Krumelur
即使引用全局软件包目录可以工作,我也不知道如何在没有访问环境变量的情况下编写这样的引用。即使假设目录没有被覆盖, 默认目录也包含用户名。 - Krumelur

4

在 Visual Studio UI 中非常简单:

  1. 右键单击项目,点击 管理 NuGet 包

enter image description here

  1. Browse 或 Installed 选项卡的列表中选择 NuGet 包,并点击 nuget.org 的 URL 链接

enter image description here

  1. 该 URL 将引导您进入此网页,转到 Script and Interactive 选项卡,然后只需单击复制按钮并将其粘贴到 Visual Studio 中的 CSI 或 *.csx 文件中即可。

enter image description here


1
是的,正如@pwhe23所指出的那样,这个功能最终出现在了C#交互式环境中。只不过是在我需要它的3-4年后 :) - Krumelur

3

如果您以前使用过FSharp,解决方案就非常简单,主要的解决方案是:

#r "nuget:Newtonsoft.Json"

以上代码获取最新的软件包版本。但是,如果您想指定一个版本,可以使用以下代码。
#r "nuget:Newtonsoft.Json,1.20"

如果您正在使用外部NuGet源,则应该使用以下方法初始化该源。

#i "nuget:http://example.com"

如果需要网络上的资源

#i "nuget:C:\Nuget"
```for sources on your local file system 


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接