不知道算不算是VS的bug,vs2015update3企业.来自WP丶panpan.zip解压密码

爆一个VS2015 Update1更新带来的编译BUG【已有解决方案】_Visual Studio_何问起
您的位置: -
爆一个VS2015 Update1更新带来的编译BUG【已有解决方案】
  一个编译的BUG,在原生的VS2015中没有问题,但更新至VS2015 Update1之后就有了,大概是Update1用了新的编译器,害得我好苦。经测试,VS2013 Update5中也存在这个问题,大概是用了相同的编译器。
  下面我们来重现这个BUG,用最简洁的代码来重现这个BUG。
一个很简单的接口,定义一个&是否锁定&的功能
public interface ILockable
bool IsLocked { get; set; }
同样一个很简单的实体定义,实现了上面定义的&ILockable&接口
public class TestModel : ILockable
public int Id { get; set; }
public string Name { get; set; }
public bool IsLocked { get; set; }
&EF上下文类
EF上下文类,同样极其简单
public class TestDbContext : DbContext
public TestDbContext()
: base("default")
public DbSet&TestModel& TestModels { get; set; }
&接口的扩展方法
为了方便查询所有未锁定的数据,给实现了&ILockable&接口的实体定义了一个查询的IQueryable&T&扩展方法,代码同样很简单
public static class Extensions
public static IQueryable&TEntity& Unlocked&TEntity&(this IQueryable&TEntity& source)
where TEntity : ILockable
return source.Where(m =& !m.IsLocked);
执行查询代码
下面,使用上面的代码来做一个很简单的查询
internal class Program
private static void Main(string[] args)
var db = new TestDbContext();
var models = db.TestModels.Unlocked().ToList();
Console.WriteLine(models.Count);
catch (Exception ex)
Console.WriteLine(ex);
Console.ReadLine();
至此,所有代码展现完毕,就是这么简单。
代码的意思也很明白,也没有什么明显的问题,但在VS2015 Update1中,会报这么个异常:
"无法将类型&RoslynBugShow.TestModel&强制转换为类型&RoslynBugShow.ILockable&。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。"}
Data: {System.Collections.ListDictionaryInternal}
HResult: -
HelpLink: null
InnerException: null
Message: "无法将类型&RoslynBugShow.TestModel&强制转换为类型&RoslynBugShow.ILockable&。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。"
Source: "EntityFramework"
StackTrace: "
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ValidateAndAdjustCastTypes(TypeUsage toType, TypeUsage fromType, Type toClrType, Type fromClrType)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.GetCastTargetType(TypeUsage fromType, Type toClrType, Type fromClrType, Boolean preserveCastForDateTime)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.CreateCastExpression(DbExpression source, Type toClrType, Type fromClrType)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ConvertTranslator.TranslateUnary(ExpressionConverter parent, UnaryExpression unary, DbExpression operand)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.UnaryTranslator.TypedTranslate(ExpressionConverter parent, UnaryExpression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Translate
Expression(Expression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MemberAccessTranslator.TypedTranslate(ExpressionConverter parent, MemberExpression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.NotTranslator.TypedTranslate(ExpressionConverter parent, UnaryExpression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(Lamb
daExpression lambda, DbExpression input, DbExpressionBinding& binding)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n
在 System.Data.Entity
.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert()\r\n
在 System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)\r\n
在 System.Data.Entity.Core.Objects.ObjectQuery`1.&&c__DisplayClass7.&GetResults&b__6()\r\n
在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)\r\n
在 System.Data.Entity.Core.Objects.ObjectQuery`1.&&c__DisplayClass7.&GetResults&b__5()\r\n
在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)\r\n
在 System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)\r\n
在 System.Data.Entity.Core.Objects.ObjectQuery`1.&System.Collections.Generic.IEnumerable&T&.GetEnumerator&b__0()\r\n
在 System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()\r\n
stem.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n
在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)\r\n
在 RoslynBugShow.Program.Main(String[] args) 位置 d:\\documents\\visual studio 2015\\Projects\\RoslynBugShow\\RoslynBugShow\\Program.cs:行号 14"
TargetSite: {System.Data.Entity.Core.Metadata.Edm.TypeUsage ValidateAndAdjustCastTypes(System.Data.Entity.Core.Metadata.Edm.TypeUsage, System.Data.Entity.Core.Metadata.Edm.TypeUsage, System.Type, System.Type)
看到这,估计能看懂的各位也蒙圈了,代码看起来真的没问题,怎么会出问题了呢,多出的这个强制转换是怎么回事。
反正,我是在这当中纠结到吐血,一度以为是实体设计的问题(在实际项目中,实体设计当然要比上面这个要复杂得多得多,排查问题的难度要大得多),后来,无意中查看到了反编译的代码,才揪出了罪魁祸首,下面来对比VS2015 Update1与VS2015两个编译器对上面的&Unlocked&扩展方法的编译:
原生 VS2015 编译
VS2015 Update1编译
由上面的反编译代码可看到,VS2015 Update1的编译结果多了个强制转换,但这种强制转换在Linq To Entities中是无法支持的,因而报了
无法将类型&RoslynBugShow.TestModel&强制转换为类型&RoslynBugShow.ILockable&。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。
这个异常。
问题上升到编译器的高度了,已经不是我们这些平民小码农能解决的了,只能期待微软在VS2015的下一个更新中能解决掉。
果然还是园子中牛人多,29楼的@Choo&提供的一个解决方案完美解决了这个问题
扩展方法的泛型类型添加一个 class 限制,VS2015 Update1 与VS2015编译的结果完全一致,问题圆满解决!
演示代码下载:RoslynBugShow.rar
/files/guomingfeng/RoslynBugShow.rar2012年3月 总版技术专家分月排行榜第一
2013年7月 荣获微软MVP称号
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。VS2015 Razor编辑器爆炸的解决办法 - 为程序员服务
VS2015 Razor编辑器爆炸的解决办法
VS2015正式版出来快一个月了,然而它经常会爆炸,比如Razor编辑器,打开任何cshtml文件都会弹个错误对话框,然后语法提示就没了。清理垃圾文件、重启电脑、卸载插件,甚至修复安装VS2015都无效:
具体消息是:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---& System.ArgumentException: Item has already been added. Key in dictionary: 'RazorSupportedRuntimeVersion'
在微软的connect网站上已经有人提过一个bug了,并且是active的,看来还没修好:
简直是 #你软药丸# 的节奏啊……
解决办法是:
2. 用管理员权限运行cmd,跑到VS安装目录下,运行:
devenv /resetuserdata
3. 到你的项目文件夹里去,找一个名叫“.VS”的隐藏文件夹,删掉。
4. 重启VS,问题解决!
// 顺便吐槽下,微软最近的产品真是越来越不靠谱了。Windows 10正式版UI到处不统一,bug还很多,解锁屏都会卡???应用用一半会crash,WP就不说了,比桌面版Win10惨多了,这么好的旗舰级停产,专卖没有电容按键和拍照键的640……VS2015安装容易爆,用着也会爆,拷个文件夹,还需要手工include里面的文件到project里,Office里面出现“Shanghai, Zhongguo”好歹已经解决。SQL Server在云端更新了14.x,本地12.x,data-tier application和azure互倒要爆,还不告诉你why,得让你自己搜个CU6补丁去打。VS2015都RTM了,Azure还不支持ASP.NET 4.6……药丸,药丸啊……
来自edi.wang的最新文章
原文地址:, 感谢原作者分享。
您可能感兴趣的代码}

我要回帖

更多关于 panpan闫盼盼压缩密码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信