我需要一个 CSharp 脚本 (.csx) 运行程序,例如 csi.exe,用于构建代理机器
I need a CSharp script (.csx) runner, like csi.exe, for a build agent machine
我正在编写 .csx 构建脚本。在我的本地机器上,我 运行 它们与来自 visual studio 或通过 C:\Program Files (x86)\MSBuild.0\bin\csi.exe
的 CSharp 交互。我已经在安装了 Microsoft Built Tools 2015 的 TeamCity 构建代理机器(代理机器执行编译等实际构建任务)上尝试了 运行ning .csx 脚本。令人惊讶的是,MSBuild 文件夹中没有 csi.exe
。
我正在寻找在我的构建代理机器上安装 csi.exe
或兼容的独立 .csx 运行ner 的方法。在 Google 中找到的选项,如 https://github.com/cake-build/cake ,似乎都有其独特的脚本风格或许多附加功能,而我正在理想地寻找 csi.exe
克隆。
您可以使用 Roslyn API.
使用您喜欢的任何自定义来编译您自己的运行器
此代码将完成 运行 脚本的基本工作:
static void Main(string[] args)
{
Task<object> result = CSharpScript.EvaluateAsync(File.ReadAllText(args[0]));
result.Wait();
}
结果证明解决方案很简单:Roslyn NuGet package 包含 csi.exe。
它将位于 packages\microsoft.net.compilers.2.4.0\tools\csi.exe
.
需要注意一件事 - 软件包的安装脚本更改 .csproj
文件以使用软件包提供的编译器。这可能不是您想要的,因此如果在安装期间进行了此类更改,请确保回滚这些更改。
微软文档中有一个很好的教程:
Cross-Platform Code Generation with Roslyn and .NET Core
它在某种程度上等同于使用 csi.exe
,但有更多好处。
在他们的示例中,您有一个变量 const string code
。这可以是您表单中的字符串或脚本文件的内容。
我自己更喜欢这种方法,因为:
- 它允许你访问和控制你的 运行ner 的资源,正确地实例化它,测量它的性能等等。简单地 运行ning CSI 如果保持不变,可能会在内存中爆炸,并且比在代码中管理它更不透明。
- 它returns 错误情况下的代码分析。您可以让用户轻松查明构建失败的来源。
- 它是跨平台的,不像例如
csi.exe
坐在某个硬盘上
- 您可以选择在 运行 时编译,或者创建一个 运行 如果预先构建
会快得多的 DLL
TeamCity 2021.2 提供了新的C# Script runner,希望是你所需要的
我正在编写 .csx 构建脚本。在我的本地机器上,我 运行 它们与来自 visual studio 或通过 C:\Program Files (x86)\MSBuild.0\bin\csi.exe
的 CSharp 交互。我已经在安装了 Microsoft Built Tools 2015 的 TeamCity 构建代理机器(代理机器执行编译等实际构建任务)上尝试了 运行ning .csx 脚本。令人惊讶的是,MSBuild 文件夹中没有 csi.exe
。
我正在寻找在我的构建代理机器上安装 csi.exe
或兼容的独立 .csx 运行ner 的方法。在 Google 中找到的选项,如 https://github.com/cake-build/cake ,似乎都有其独特的脚本风格或许多附加功能,而我正在理想地寻找 csi.exe
克隆。
您可以使用 Roslyn API.
使用您喜欢的任何自定义来编译您自己的运行器此代码将完成 运行 脚本的基本工作:
static void Main(string[] args)
{
Task<object> result = CSharpScript.EvaluateAsync(File.ReadAllText(args[0]));
result.Wait();
}
结果证明解决方案很简单:Roslyn NuGet package 包含 csi.exe。
它将位于 packages\microsoft.net.compilers.2.4.0\tools\csi.exe
.
需要注意一件事 - 软件包的安装脚本更改 .csproj
文件以使用软件包提供的编译器。这可能不是您想要的,因此如果在安装期间进行了此类更改,请确保回滚这些更改。
微软文档中有一个很好的教程: Cross-Platform Code Generation with Roslyn and .NET Core
它在某种程度上等同于使用 csi.exe
,但有更多好处。
在他们的示例中,您有一个变量 const string code
。这可以是您表单中的字符串或脚本文件的内容。
我自己更喜欢这种方法,因为:
- 它允许你访问和控制你的 运行ner 的资源,正确地实例化它,测量它的性能等等。简单地 运行ning CSI 如果保持不变,可能会在内存中爆炸,并且比在代码中管理它更不透明。
- 它returns 错误情况下的代码分析。您可以让用户轻松查明构建失败的来源。
- 它是跨平台的,不像例如
csi.exe
坐在某个硬盘上 - 您可以选择在 运行 时编译,或者创建一个 运行 如果预先构建 会快得多的 DLL
TeamCity 2021.2 提供了新的C# Script runner,希望是你所需要的