【问题标题】:How to specify compiler options in c# file?如何在 c# 文件中指定编译器选项?
【发布时间】:2019-02-15 12:41:08
【问题描述】:

我有一个使用以下命令行编译的 code.cs 文件:

"%ProgramFiles(x86)%\MICROS~3\2017\ENTERP~1\MSBuild\15.0\Bin\Roslyn\csc.exe" ^
/target:library /out:fx1.dll fx1.cs ^
/reference:"C:\blah\blah\Microsoft.JScript.dll" ^
/reference:"C:\astor\loads\better\ease\zog.dll"

有没有一种实用的方法可以在 fx1.cs 文件中指定这些选项?

这主要是 C#,但其他 .Net 语言如 Vb.Net 和其他呢?是否至少有一种语言可以在自包含文件中指定编译器参数?

更新:我还看到有 csc 的应答文件,但它们缺乏(或者我看不到)足够的流控制来将一个嵌入到 cs 文件中。

【问题讨论】:

  • 没有。通常,您使用一个项目(.csproj),它有效地定义了这些选项(并将其与 msbuilddotnet 结合使用)。还有一些系统可以创建 C#“脚本”(scriptcs 和其他),它们使用特殊的一次编译和运行您的 C# 文件的工具,并让您指定文件内的引用等内容。
  • 为控制cmets定义语法,在文件开头的cmets中写入参数,提取并运行它们不会太难。
  • 对于您的实用程序,您是否想象使用本地或网络文件系统以外的任何类型的存储库或电子邮件以外的任何传递机制?
  • 您可能会认为 PowerShell 是一种满足您大部分要求的 .NET 语言。 Example 带有程序集参考。
  • @TomBlodget PowerShell可以编译成exe还是dll?

标签: c# windows msbuild roslyn csc


【解决方案1】:

我作为这个问题的基线答案提出的解决方案是将 C# 文件转换为“多语言”*.cs.bat 文件,该文件在 C# 源代码之上运行完整的编译命令。

/*? 2>NUL & @echo off
echo.
echo COMPILING...

"%ProgramFiles(x86)%\MICROS~3\2017\ENTERP~1\MSBuild\15.0\Bin\Roslyn\csc.exe" ^
/target:library /out:fx1.dll fx1.cs.bat ^
/reference:"C:\blah\blah\Microsoft.JScript.dll" ^
/reference:"C:\astor\loads\better\ease\zog.dll"

PAUSE
GOTO:EOF REM */

// C# program...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;

// blah...

要编译,我可以运行 fx1.csfx1.cs.bat。这当然是实用的。

这可能有用,但至少有以下缺点:

  • 文本突出显示在具有 *.cs 文件的各种编辑器中丢失...如果只有一种(简单)方法可以将 *.cs 文件作为批处理运行(type file | cmd 似乎忽略 @ 987654327@、EXIT /BEXITGOTO:EOF)

  • 编译器路径是硬编码的(但我认为可以通过更多的批处理来确定)

  • 它试图运行/*.exe,所以第一行总是给我一个错误,因为我没有办法避免它被运行,所以我只能在里面放一个?(所以它不应该永远是一个有效的路径)并通过错误重定向隐藏它。

虽然在 IDE 中编辑是不切实际的,但我认为这可能是分发简单实用程序的一种简单格式。

我不太擅长这个......所以如果有人有更好的想法(对于多语言路线),请通过评论或编辑来改进这个答案。

【讨论】:

  • 这只是个坏主意。仅仅因为你能做到,并不意味着你应该这样做。
  • 我知道,这很不切实际。因此是最初的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 2013-05-19
相关资源
最近更新 更多