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

问题描述 投票:0回答:1

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

c# windows msbuild roslyn csc
1个回答
0
投票

我提出的解决方案是这个问题的基本答案是将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似乎忽略PAUSEEXIT /BEXITGOTO:EOF
  • 编译器路径是硬编码的(但我认为可以通过更多批处理来确定)
  • 它试图运行/*.exe,所以第一行总是给我一个错误,因为我发现无法避免它被运行,所以我只能在那里放一个?(因此它不应该是一个有效的路径)并隐藏它错误重定向。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.