问题标签 [csc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-construction - C# Object Initializers 和 v2.0 编译器错误
我在 TeamCity (v4.0) 中设置我的一个项目时遇到问题,特别是在使用对象初始化器时。
该项目正常构建,但似乎 TeamCity 将构建文件转换为它喜欢的东西(一些 MSBuild 突变),并且在为解决方案的一部分编译代码时,它在看到对象初始化程序时会犹豫不决。
具体的错误是:
当我进一步研究时,问题似乎与使用 v2.0 框架目录中的 CSC 将构建文件转换为 TeamCity 格式有关。
是否可以使用带有 .NET 2.0 编译器的对象初始化程序(.NET 3.0 功能)来编译代码(我认为不会,尽管我可能会遗漏一些东西),如果没有,有没有人知道强制它使用的方法3.0 编译器(如果存在)还是 3.5 编译器?
对于那些感兴趣的人,正在执行的 CSC 命令是:
谢谢!
更新:我已经部分(阅读:我对此不满意)通过将构建运行程序从 Nant 更改为命令运行程序来解决问题 - 这只是按预期执行了 Nant 构建文件,没有任何操作,尽管反馈级别是不同的。任何其他建议将不胜感激。
.net - 确定 CLR 系统目录
关于 C# 命令行编译器 /lib 开关的MSDN 文章指定了以下内容:-
编译器按以下顺序搜索不完全限定的程序集引用:
当前工作目录。这是调用编译器的目录。
公共语言运行时系统目录。
/lib 指定的目录。
LIB 环境变量指定的目录。
您如何以编程方式确定 CLR 运行时系统目录在系统上的位置?
.net - 为什么我的应用程序在执行期间使用 CSC
我一直在尝试使用 Remotesoft Linker 和 Mini Deployment 工具从我的托管代码创建单个本机可执行文件(不需要安装框架)。它具有的可配置功能之一是 csc.exe 是否可用于最终可执行文件。它的文档说它通常只在使用 XML 序列化时才需要(我是)。我修改了构建过程以使用 SGen 创建序列化程序集,并将结果添加到使用我的 xml 类的解决方案中每个项目的引用中。序列化类使其成为链接的 .net 可执行文件(所有 .net dll 组合成一个托管 exe);所以我假设我已经正确配置了。
但是,我的应用程序在运行时仍会尝试执行 csc。我是否对序列化程序集做错了什么,导致它在运行时重新创建;或者我的应用程序是否在做其他需要 csc 的事情,我该如何确定?
http://www.remotesoft.com/linker/
编辑:使用修改后的 app.config 进行一些测试,以保持序列化文件在生成时可见(通过撤消构建时间生成进行测试);看来我之前确实已经正确创建了它们。除非框架的不同部分在运行时调用 csc 并且使用不同的标志不隐藏其结果,否则我认为 RemoteSoft 工具可能是罪魁祸首。我不能确定,因为即使它注入的 app.config 文件告诉它,输出可执行文件也不会留下它创建的任何临时文件。
我使用的 app.info 是这个。在其他地方,我看到了使用值 4 的示例,但无法找到它们的行为之间的任何区别。
c# - 是否可以在没有 Visual Studio 的情况下安装 C# 编译器?
我想从命令行构建项目。是否可以在不安装Visual Studio的情况下部署 C# 编译器?
c# - 您如何使用 GAC 的程序集作为 csc.exe 的引用?
我正在从 csc.exe 编译(嗯,CruiseControl 是...),我需要在 GAC 中引用一个 DLL。我没有此 DLL 的正确版本作为简单文件,但 GAC 中有正确版本。
但是,您不能使用 csc 引用 GAC 中的程序集——您必须具有实际文件的路径。
我发现一些引用声称您可以对实际文件的路径进行反向工程,但我无法让它们工作。我启动了 Fusion 日志记录,我可以看到运行时从哪里获取文件,但是在我的参考中使用指向该位置的文件路径不起作用。
那么,如何为 csc 提供对仅存在于 GAC 中的程序集版本的引用?
c# - 为什么编译器对这行代码有问题?
整个解决方案在 Visual Studio 中构建良好,但是当我运行 Nant 脚本来编译网站时,我在这一行遇到了几个错误:
第一个说 Type Expected,然后是 Syntax error (value expected), ) expected, ; 预期等。我以前在项目中使用过这样的行,它似乎并没有抱怨这些行。
我很确定错误来自对该条件语句调用拆分,但我不知道为什么。
c# - 在 csc.exe 中导致堆栈溢出 (CS1647) 的 C# CodeDom 的解决方法?
我有一种情况,我需要生成一个带有大字符串 const 的类。我无法控制的代码导致我生成的 CodeDom 树被发送到 C# 源代码,然后编译为更大程序集的一部分。
不幸的是,我遇到了这样一种情况,如果此字符串的长度在 Win2K8 x64 中超过 335440 个字符(在 Win2K3 x86 中为 926240),C# 编译器将退出并出现致命错误:
MSDN 说 CS1647 是“编译器中的堆栈溢出”(不是双关语!)。仔细观察,我确定 CodeDom “很好地”将我的字符串 const 包装在 80 个字符处。这导致编译器连接超过 4193 个字符串块,这显然是 x64 NetFx 中 C# 编译器的堆栈深度。CSC.exe 必须在内部递归地评估此表达式以“补充”我的单个字符串。
我最初的问题是:“有人知道改变代码生成器如何发出字符串的变通方法吗? ”我无法控制外部系统使用 C# 源作为中间体的事实,我希望这是一个常量(而不是而不是字符串的运行时连接)。
或者,我如何制定这个表达式,以便在一定数量的字符之后,我仍然能够创建一个常量,但它是由多个大块组成的?
完整的复制在这里:
visual-studio-2008 - 使用 vs2008 编译的源生成的二进制文件与 csc 在命令行直接编译的相同源不同
我不明白为什么如果我使用 Visual Studio 2008 (MSBuild) 编译相同的源代码,然后在命令行中使用 csc (或 NANT),我无法获得完全相同的二进制文件(相同的程序集)。
命令行与 Visual Studio 调用的命令行相同,因为我从输出窗口复制命令,然后将命令粘贴到 vs2008 命令提示符。
我知道,如果我在不同时间编译相同的源代码,我会因为程序集元数据中的时间戳而获得不同的二进制文件。事实上,如果我比较 vs2008 在不同时间生成的两个二进制文件,我会注意到二进制数据之间的细微差别。
但是,如果我先用 vs 编译,然后再用 csc 编译,那么二进制文件就大不相同了!你知道为什么吗?怎么了?
c# - 从命令行编译 ms office interop 应用程序
我如何使用 csc.exe 从命令行成功编译此代码,就我应该引用哪个 dll 而言。我希望它可以与 Office 2007 和 Office 2003 一起使用。
我正在使用 .Net Framework SDK 2.0。
我得到这个编译错误:
(2,37):错误 CS0234:命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”(您是否缺少程序集引用?)
源代码:
visual-studio - 为什么使用 CSC.EXE 与 Devenv 时我的输出文件大小不同?
我正在和 Nant 和 CSC 一起玩。我注意到如果通过 CSC 和 nant 构建脚本编译,我的 dll 的调试版本为 140k。但是,如果我在 Visual Studio env 中构建调试版本,它是 203k!?然而,较小的 DLL 在主程序中似乎可以正常工作。有任何想法吗?