Tag: 编译

获取错误并非所有代码路径都通过c#编译器返回值

这是一个基本的字符串反向程序,我想在其中进行一定程度的exception处理。 但在编译期间它给了我一个错误“没有所有代码路径返回值。我无法找出原因 public static string Reverse(string s) { try { if (string.IsNullOrEmpty(s)) { throw new NullReferenceException(); } char[] c = s.ToCharArray(); int start = 0; int end = c.Length – 1; char temp; while (start < end) { temp = c[start]; c[start] = c[end]; c[end] = temp; start++; end–; } return new string(c); } catch […]

CodeDomProvider.CompileAssemblyFromSource – 找不到Roslyn(csc.exe)

我们最近从旧的CodeDomProvider升级到名为Microsoft.CodeDom.Providers.DotNetCompilerPlatform的新Roslyn CodeDomProvider。 它工作正常,但它在错误的地方寻找csc.exe。 NuGet包将exe放在路径中: [App Path] \ bin \ Debug \ roslyn 但是,当我们编译时,我们得到这个错误: 无法找到路径'[App Path] \ bin \ Debug \ bin \ roslyn \ csc.exe’的一部分。 请注意,它正在寻找错误位置的exe。 它正在bin \ Debug文件夹中的“bin”文件夹中查找它。 因此,为了使我们的代码编译,我们需要将Roslyn编译器移动到:[App Path] \ bin \ Debug \ bin \ roslyn \ csc.exe 有没有办法告诉CodeDomProvider Roslyn编译器所在的位置? 这不仅仅是Roslyn编译器代码中的一个直接错误吗?

编译器版本与.NET Framework版本 – ASP.NET应用程序的场景

场景: 我的VS 2010(C#4编译器)在我的客户端计算机上以3.5为目标。 我正在开发ASP.NET应用程序。 我在类文件中使用可选参数(支持C#4)并编译代码,看起来一切正常。 稍后在运行时发现的一个问题,旧的(经典的我相信)ASPX正在使用该function。 没有函数只接受x参数,其中x比可选参数小1是运行时错误。 这是否意味着普通类,并且使用客户端的C#编译器,而视图(aspx)等使用服务器上的编译器 – 因此如果在视图/表单文件中使用C#4会导致问题?

C#动态编译字符串和.cs文件

我正在一个网站上工作,用户可以在浏览器文本区域中为问题实现C#代码解决方案并提交。 然后,服务器将编译该代码以及我在服务器上提供的预定义接口。 将其视为战略设计模式; 我提供了一个策略界面,用户可以实现它。 所以我需要在运行时一起编译一个字符串和一个预定义的* .cs文件。 这是我现在只编译字符串部分的代码: CodeDomProvider codeProvider = CodeDomProvider.CreateProvider(“CSharp”); CompilerParameters parameters = new CompilerParameters(); parameters.OutputAssembly = “CodeOutputTest.dll”; // need to name this dynamically. where to store it? parameters.GenerateExecutable = false; parameters.IncludeDebugInformation = false; CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, request.Code); 用户会提交以下内容: public class UserClass : IStrategy { public string ExecuteSolution(string input) { // user code […]

如果使用Debug dll,服务不会及时响应启动或控制请求

我试图在我的机器上部署一个Windows服务,但是当我试图启动它时,我得到了以下错误。 “Windows无法在本地计算机上启动’myService’。错误1053:服务未及时响应启动或控制请求。” 经过一些研究后,我发现我正在使用Debug选项来编写我的项目,当我将其更改为’Release’模式时,一切都很好并正常工作。 我无法弄清楚这种行为,所以我在网上搜索并发现了这个调试vs-release-in-net,但即便如此也无法解释为什么我的窗口服务很难启动,如果我使用调试模式的dll 如果有人能够解释它将有助于我了解这实际上是如何工作的感谢。

C#编译器/优化命令行选项是否会影响JITter?

我一直在阅读Eric Lippert关于C#编译器的/ optimize命令行选项的文章 。 本文描述了编译器执行的优化类型。 但是,如果此选项也影响JIT优化,我仍然不清楚。 这个选项会让编译器发出一些元数据,而这种抖动可以理解为改变“优化模式”,这并非不可想象。 是否有任何参考可以确认,或者如果此选项确实影响JITter?

C#代码是否编译为本机二进制文件?

我知道Java代码被编译成字节代码,由JVM执行。 C#的情况如何? 我注意到用C#编写的应用程序具有.exe扩展名,这表示它们是本机机器指令。 但它真的如此吗?

为什么C#4.0容忍匿名对象初始化代码中的尾随逗号?

可能重复: 内联属性初始化和尾随逗号 在我的一个项目(C#4.0,Visual Studio 2010)上工作,我意外地发现了代码 var obj = new { field1 = “Test”, field2 = 3, } 编译和执行确定没有任何错误甚至警告,并且工作完全一样 var obj = new { field1 = “Test”, field2 = 3 } 为什么编译器在第一个例子中容忍尾随昏迷? 这是编译器中的错误还是这样的行为确实有一些目的? 谢谢

从C#程序运行C#编译器

我正在尝试构建一个将不同语言转换为C#代码的C#程序。 我有程序正常工作,转换代码并将其写入.cs文件。 我希望自动编译和运行此文件,但是我无法弄清楚如何使用C#执行此操作。 我可以通过运行我编写的批处理文件手动完成,并尝试使用System.Diagnostics.Process类从C#运行此批处理文件。 当它运行时,它在批处理代码本身中给出了一个错误,说没有找到任何命令(通常的“不是可执行文件,批处理文件等”)。 我无法弄清楚为什么它能正常运行,但不能从C#运行时。 这是批处理文件代码:C:\ Program_Files_(x86)\ Microsoft_Visual_Studio 10.0 \ VC \ bin \ amd64 \ vcvars64.bat csc%1.cs暂停 以及调用它的函数: System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = “compiler\\compile.bat”; process.StartInfo.Arguments = ” “+fileName; process.Start(); process.WaitForExit(); process.StartInfo.FileName = fileName + “.exe”; process.Start(); process.WaitForExit(); Console.WriteLine(“done”); 任何帮助将不胜感激。

CompileAssemblyFromDom抛出访问被拒绝的exception

代码: using (var codeProvider = new CSharpCodeProvider()) { var compilerParameter = new CompilerParameters( _assemblies, assemblyName, false) { GenerateInMemory = true, CompilerOptions = “/optimize” }; var compilerResults = codeProvider.CompileAssemblyFromDom( compilerParameter, templateResults.Select(r => r.GeneratedCode) .ToArray()); } 它抛出exception:CS1567生成Win32资源时出错:访问被拒绝。 这是什么意思?