【发布时间】:2019-09-26 14:48:01
【问题描述】:
我已使用nuget.exe 将 Roslyn 的副本下载到我计算机上的一个空目录中。然后,我在 C# 中创建了一些小测试文件来使用编译器。在我的代码中,我使用了来自 .NET Framework 的功能,例如 SqlDataReader。使用 Roslyn 附带的 csc.exe 二进制文件进行编译时,我没有手动指定任何要包含在 -reference 或 -r 命令行选项中的 .NET 程序集,但一切仍然有效。
我在与csc.exe 相同的目录中找到了csc.rsp 文件,包括其中一些.NET 程序集。如果未指定 -noconfig 命令行选项,则会自动添加此文件中的命令行选项。部分文件如下所示:
# Reference the common Framework libraries
/r:Accessibility.dll
/r:Microsoft.CSharp.dll
/r:System.Configuration.dll
/r:System.Configuration.Install.dll
/r:System.Core.dll
/r:System.Data.dll
/r:System.Data.DataSetExtensions.dll
/r:System.Data.Linq.dll
/r:System.Data.OracleClient.dll
/r:System.Deployment.dll
我怀疑这个csc.rsp 文件是编译器能够成功编译我的代码的原因,即使我没有手动包含任何.NET 程序集。不过,我的问题是,csc.exe 是如何知道在哪里查找这些文件的?
我用 VSCode 搜索了整个 Roslyn 目录,寻找任何可能的配置,指定搜索程序集的路径,但没有发现任何问题。我还检查了我的系统路径变量的目录,它可能会自动从中获取文件,但我也找不到任何东西。 csc.exe 是如何包含这些文件的,即使我没有告诉它在我的计算机上哪里可以找到它们?
【问题讨论】: