7

我正在编写 .csx 构建脚本。在我的本地机器上,我使用 Visual Studio 中的 CSharp 交互或通过C:\Program Files (x86)\MSBuild\14.0\bin\csi.exe. 我尝试在安装了 Microsoft Built Tools 2015 的 TeamCity 构建代理机器上运行 .csx 脚本(代理机器执行编译等实际构建任务)。令人惊讶的是,MSBuild 文件夹中没有csi.exe

我正在寻找一种csi.exe在我的构建代理机器上安装或兼容的独立 .csx 运行器的方法。在 Google 中找到的选项,如https://github.com/cake-build/cake,似乎都有其独特的脚本风格或许多附加功能,而我正在寻找一个csi.exe理想的克隆。

4

4 回答 4

6

解决方案很简单:Roslyn NuGet 包包含 csi.exe。它将位于packages\microsoft.net.compilers.2.4.0\tools\csi.exe

需要注意的一件事 - 包的安装脚本更改.csproj文件以使用包提供的编译器。这可能不是您想要的,因此如果在安装期间进行了此类更改,请确保回滚这些更改。

于 2017-11-18T21:48:00.910 回答
3

您可以使用Roslyn API使用您喜欢的任何自定义来编译您自己的运行器。

此代码将完成运行脚本的基本工作:

static void Main(string[] args)
{
    Task<object> result = CSharpScript.EvaluateAsync(File.ReadAllText(args[0]));
    result.Wait();
}
于 2017-11-18T07:58:14.233 回答
2

Microsoft 文档中有一个非常好的教程: Cross-Platform Code Generation with Roslyn and .NET Core

它有点等同于使用csi.exe,但有额外的好处。

在他们的示例中,您有一个变量const string code。这可能是表单中的字符串或脚本文件的内容。

我自己更喜欢这种方法,因为:

  • 它允许您访问和控制 runner 的资源,正确地实例化它,测量它的性能等。如果保持不变,简单地运行 CSI 可能会在内存中爆炸,并且比在代码中管理它更不透明。
  • 它会在出现错误时返回代码分析。您可以让用户轻松查明不成功构建的根源。
  • 它是跨平台的,不像csi.exe坐在某个硬盘上
  • 您可以选择在运行时编译,或者创建一个运行速度更快的 DLL(如果预先构建)
于 2020-05-06T10:23:42.797 回答
0

TeamCity 2021.2 提供了一个新的 C# Script runner,希望你需要什么

于 2021-10-13T07:28:50.593 回答