【问题标题】:Referencing a local csproj from a C# script从 C# 脚本引用本地 csproj
【发布时间】:2018-12-27 15:09:49
【问题描述】:

我一直在尝试使用 C# 脚本 (*.csx) 对一些内部 API 的服务调用结果进行一些数据处理。到目前为止一切顺利,但我现在正试图从我可以访问的 C# 项目中调用一些方法。 C# 项目没有发布的 nuget 包,这意味着直接使用 #r 引用 dll。但是,为了访问必要的功能,我发现我还需要为任何项目依赖项和依赖项使用的任何 nuget 包添加对脚本顶部的引用。

#r "PATH_TO_SOLUTION\Project\bin\Debug\netstandard2.0\binary.dll"
#r "PATH_TO_SOLUTION\ProjectDependency\bin\Debug\netstandard2.0\dependent.dll"
#r "nuget: Some.Dependency, 11.0.2"
#r "nuget: Some.Other.Dependency, 10.0.2"
#r "nuget: Some.Third.Dependency, 9.0.2"
using Project;

我是 C# 脚本世界的新手,没有找到任何直接解决这个问题的方法,所以希望我在这里没有问一些非常明显的问题。

一些项目依赖于大量的 nuget 包,有没有一种方法可以从 C# 脚本中引用 csproj,而无需显式引用项目的所有依赖项?

如果我可以提供任何其他信息,请告诉我。

【问题讨论】:

  • 由于您可以访问项目文件本身,因此您可以构建项目。正确的?如果你能做到这一点,你可以在你的 C# 脚本中引用项目生成的程序集(我假设是一个 dll)
  • 毫无疑问,我能够构建项目并成功引用已编译的 dll (#r "PATH_TO_SOLUTION\Project\bin\Debug\netstandard2.0\binary.dll")。在执行时,当项目尝试使用需要 nuget 包 (Some.Dependency) 的方法时,脚本会引发错误。我发现解决该错误的唯一方法是将对该包的引用添加到我的 C# 脚本 (#r "nuget: Some.Dependency, 11.0.2")。参考文献的数量很快就增加了。所以我想知道是否可以引用该项目而不必添加对其包的显式引用。

标签: c# .net-core csx


【解决方案1】:

请注意 Microsoft Docs 中的Essential .NET - C# Scripting

您可以获取整个列表并将其保存为 CSX 文件,然后 使用 #load 将文件“导入”或“内联”到 C# REPL 窗口中 拼写.csx。 #load 指令允许您包含其他脚本 文件好像所有#load 文件都包含在同一个“项目”中,或者 “汇编。”将代码放置到单独的 C# 脚本文件中可以使 文件重构的类型,更重要的是,持久化的能力 随着时间的推移 C# 脚本。

获取所有参考,将其保存为 CSX 文件并试一试。

例如:

//Load scripts
#load "Script.csx"  
using Project;

【讨论】:

  • 我见过加载命令,但我没有想到。它工作得很好,尽管不幸的是它仍然需要列出项目 dll 所需的所有 nuget 依赖项。它更干净,也很容易维护。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2014-06-25
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
相关资源
最近更新 更多