如何在C#文件中指定编译器选项?

时间:2019-02-15 12:41:08

标签: c# windows msbuild roslyn csc

我有一个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文件中。

1 个答案:

答案 0 :(得分:0)

作为该问题的基准答案,我想出的解决方案是将C#文件转换为“ polyglot” *.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似乎忽略了PAUSEEXIT /BEXITGOTO:EOF

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

  • 它尝试运行/*.exe,所以第一行总是给我一个错误,因为我找不到避免它运行的方法,所以我只能在其中放置?(因此它永远不会是有效路径),并通过错误重定向将其隐藏。

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

我在这方面不是很擅长...因此,如果有人有更好的主意(多语言路线),请通过评论或编辑来改善此答案。