c# - VS2015 构建失败,动态没有错误消息

标签 c# visual-studio-2015 roslyn

我正在对一段返回 JSON 的代码编写单元测试。它返回的类型是匿名类型,所以我想验证它的值我只是将对象转换为 dynamic 来做我的断言。

但是,当我这样做时,我的构建失败了,但我没有收到任何错误消息。我能够在一个新的单元测试项目中用非常简单的代码重现它:

[TestMethod]
public void TestMethod1()
{
    var obj = new { someValue = true };

    dynamic asDynamic = obj;

    Assert.IsTrue(asDynamic.someValue);
}

下面是构建失败的截图

build failing

当我注释掉断言时构建成功:

build succeeding without assert

相比之下,我在 LinqPad 5 beta(使用 Roslyn 编译器)中运行了以下代码并且没有出现任何问题:

var obj = new { someValue = true };
dynamic asDynamic = obj;
Console.WriteLine((asDynamic.someValue == true).ToString());

True

这是怎么回事?由于没有显示错误,我无法判断我是否错误地使用了 dynamic,或者它是否找不到用于 IsTrue() 的重载,因为dynamic 的错误,或者这是编译器中的一个错误(虽然我非常怀疑这一点,但我没有任何证据表明我的代码有问题)。

关于过载的问题,我尝试了Assert.IsTrue((bool)asDynamic.someValue);,但是仍然构建失败,仍然没有错误信息。

根据@RonBeyer 的评论,我还尝试了更多强制转换,例如以下但无济于事:

    dynamic asDynamic = (dynamic)obj;
    Assert.IsTrue(((dynamic)asDynamic).someValue);

    Assert.IsTrue((bool)asDynamic.somevalue);

仔细检查后,我发现“输出”窗口中列出了一个错误:

c:...\DynamicBuildFailTest\UnitTest1.cs(16,33,16,42): error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'

好的,VS2013更擅长报错,我会根据那些来搜索:

enter image description here

好的,adding a reference to Microsoft.CSharp fixed the build error ,但我会保留这个问题,因为它可能是 VS2015 的一个问题(在我看来)应该得到解决。

最佳答案

存在编译错误,Visual Studio 2015 只是没有正确报错。但是,Visual Studio 2013 会:

这里有答案:https://stackoverflow.com/a/13568247 :

简而言之:

Add a reference to Microsoft.CSharp in order to use dynamic like this.

关于c# - VS2015 构建失败,动态没有错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969637/

相关文章:

c# - 为 ITypeSymbol 取空

c# - C# 程序能否将文本文件读入内存,然后将该对象传递给需要文件名的方法?

c# - 防止代码定时部分的上下文切换(或测量然后减去实际未在线程中花费的时间)

c# - CLR 中的托管堆

visual-studio-2015 - 如何在 Visual Studio 2015 中使用 NuGet 4.x?

c++ - 哪些编译器选项用于在 Visual Studio 中编译 C++ STL 类/函数?

c# - roslyn 分析器发出警告,后来被删除

C#、EF 和 LINQ : slow at inserting large (7Mb) records into SQL Server

wpf - 在具有设计预览功能的 ResourceDictionary 中包含 XAML 图像

c# - 针对网络标准 1.6 的 .net 核心应用程序中的动态引用?