草庐IT

反编译器

全部标签

c# - 奇怪的 C# 编译器行为(重载解析)

我发现以下代码的C#编译器行为非常奇怪:varp1=newSqlParameter("@p",Convert.ToInt32(1));varp2=newSqlParameter("@p",1);Assert.AreEqual(p1.Value,p2.Value);//PASSvarx=0;p1=newSqlParameter("@p",Convert.ToInt32(x));p2=newSqlParameter("@p",x);Assert.AreEqual(p1.Value,p2.Value);//PASSp1=newSqlParameter("@p",Convert.ToInt32

c# - c# 编译器比 VB.NET 编译器更聪明吗?

如果我查看在Linqpad中为以下两个代码片段创建的IL,我想知道这里发生了什么。在C#中inti=42;产生以下IL代码IL_0000:ret而在VB中DimiAsInteger=42是IL_0000:ldc.i4.s2AIL_0002:stloc.0显然,c#编译器知道该值从未被使用过,因此什么也不返回。在VB.NET中,翻译了实际代码。这是由于编译器优化的差异还是其他原因造成的?更新:只是为了澄清这一点-我只是将这一行输入到LinqPad中并查看它创建的IL(最肯定的是通过运行相应的编译器)。没有程序。 最佳答案 去掉linq

c# - C# 编译器中的已知错误列表

有这样的列表吗?我不希望得到一个完整的列表,但是最知名的列表一定足够了。 最佳答案 最近修复的错误列表可以在这里找到:http://msdn.microsoft.com/en-us/library/cc713578.aspx他们称之为“重大变化”。 关于c#-C#编译器中的已知错误列表,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1130114/

c# - 静态构造函数可以在非静态构造函数之后运行。这是编译器错误吗?

以下程序的输出是:Non-StaticStaticNon-Static这是编译器错误吗?我预计:StaticNon-StaticNon-Static因为我认为静态构造函数总是在非静态构造函数之前被调用。我使用.net3.5和.net4.0通过VisualStudio2010对此进行了测试。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceStaticConstructorBug{classProgram{staticvoidMain(string[]args){v

c# - roslyn 编译器未使用 msbuild 复制到 AspnetCompileMerge 文件夹

我有一个.NETMVC项目,我正在尝试使用Jenkins进行部署。我一直让Jenkins运行msbuild,然后使用RoboCopy复制生成的文件。我想切换到只使用发布配置文件。发布配置文件在我使用VisualStudio的本地计算机上运行良好,但在Jenkins主机上使用msbuild失败。它给出的错误是ASPNETCOMPILER:errorASPRUNTIME:Couldnotfindapartofthepath'C:\ProgramFiles(x86)\Jenkins\jobs\myProject\workspace\myProject\obj\Debug\AspnetComp

c# - 是否可以使用使用 dotPeek 反编译的源代码实际调试 3rd 方代码?

我使用VS2012。我知道如何使用.NETReflector调试第3方代码并一直使用它。我想知道这是否可以通过JetBrains的dotPeek或没有dotPeek的R#本身来实现。我能够导航到反编译的第3方代码,但无法单步执行。有什么想法吗? 最佳答案 我看到这个问题仍在为我的博客增加流量,所以我将添加一个答案:是的,现在可以使用JetBrainsdotPeek调试第3方程序集。反编译器(完全免费),将其用作Symbolserver.在我的博文中HowtodebuganythingwithVisualStudioanddotPee

c# - 编译器将显式转换为我自己的类型替换为显式转换为 .NET 类型?

我有以下代码:publicstructNum{privatereadonlyT_Value;publicNum(Tvalue){_Value=value;}staticpublicexplicitoperatorNum(Tvalue){returnnewNum(value);}}...doubled=2.5;Numb=(Num)d;这段代码编译通过了,这让我很惊讶。显式转换应该只接受byte,不是double.但不知何故,双重被接受了。当我在转换中放置一个断点时,我看到value已经是byte具有值(value)2.从double转换为byte应该是显式的。如果我用ILSpy反编译我的

c# - JIT 编译器是编译器还是解释器?

我的问题是将IL转换为机器语言的JIT编译器到底是编译器还是解释器。还有一个问题:HTML、JavaScript是编译型语言还是解释型语言?提前致谢 最佳答案 JIT(justintime)编译器是一种编译器。它进行优化以及编译为机器代码。(甚至称为编译器)HTML、Javascript被解释,它们由Web浏览器按原样读取,并以最少的错误修复和优化运行。 关于c#-JIT编译器是编译器还是解释器?,我们在StackOverflow上找到一个类似的问题: htt

c# - 编译器错误 "Default parameter specifiers are not permitted"

下面是我的代码。publicclassPItem{publicStringcontent;publicintcount;publicintfee;publicintamount;publicstringdescription;//DefaultvaluespublicPItem(String_content="",int_count=0,int_fee=0,string_description="",int_amount=0){content=_content;count=_count这是在一个类里面。当我尝试运行程序时出现此错误:Defaultparameterspecifiersa

c# - 编译器魔法 : Why?

我刚刚注意到给定以下代码:if(x.ID>0&&!x.IsCool)MicrosoftC#3.0(VS2008SP1)编译器会对此进行优化:if(!((x.Id这是在未启用优化的情况下进行的调试构建。为什么编译器会那样做?它在执行方面是否更快?我使用Reflector找到了答案(我实际上是在寻找不同的东西) 最佳答案 C#编译器肯定不会为您的代码段生成等效的C#代码。它被编译成IL。基本上,您所看到的(我猜是来自Reflector)是反编译器为该IL吐出的等效C#代码。语言规范没有说明什么是“未优化”代码。C#编译器可以生成任何有效