c#不同解决方案的动态行为不同

c#不同解决方案的动态行为不同,c#,c#-4.0,reflection,dynamic,reference,C#,C# 4.0,Reflection,Dynamic,Reference,我有一个很奇怪的问题。如果我创建了一个新的控制台应用程序并将代码放入,下面的代码可以正常工作,但是如果我在解决方案中创建了一个新的控制台应用程序并将完全相同的代码粘贴到中,我会得到一个运行时绑定异常,即动态不包含hello的定义。wierd things在我现有的解决方案中,代码从未进入TryGetMember() 这真的很困扰我,解决方案太大了,无法进入新的解决方案,我不相信这会解决它。在不工作的控制台应用程序中,所有引用都与工作的控制台应用程序中的引用相同。唯一的区别在于它不在解决方案中。整

我有一个很奇怪的问题。如果我创建了一个新的控制台应用程序并将代码放入,下面的代码可以正常工作,但是如果我在解决方案中创建了一个新的控制台应用程序并将完全相同的代码粘贴到中,我会得到一个运行时绑定异常,即动态不包含hello的定义。wierd things在我现有的解决方案中,代码从未进入TryGetMember()

这真的很困扰我,解决方案太大了,无法进入新的解决方案,我不相信这会解决它。在不工作的控制台应用程序中,所有引用都与工作的控制台应用程序中的引用相同。唯一的区别在于它不在解决方案中。整个解决方案与动力学的作用方式相同-有趣的是,这是可行的,但突然停止,所以我创建了这个简单的程序来测试理论

编辑:如果我不附加调试器,即Ctrl+F5,则解决方案中不工作的应用程序可以正常工作

有什么想法吗

    using System.Collections;
using System.Collections.Generic;
using System.Dynamic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            IDictionary<string, object> dictionary = new Dictionary<string, object>();
            dictionary["hello"] = "world";
            dynamic d = new MyDynamicModel(dictionary);
            var a = d.hello;
        }

    }

    public class MyDynamicModel : DynamicObject
    {
        private IDictionary<string, object> Values { get; set; }
        public MyDynamicModel(IDictionary<string, object> dict)
        {
            Values = dict;
        }

        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            return Values.TryGetValue(binder.Name, out result);
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
运用系统动力学;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
IDictionary dictionary=新字典();
字典[“你好”]=“世界”;
动态d=新的MyDynamicModel(字典);
var a=d.hello;
}
}
公共类MyDynamicModel:DynamicObject
{
私有IDictionary值{get;set;}
公共MyDynamicModel(IDictionary dict)
{
值=dict;
}
公共重写bool TryGetMember(GetMemberBinder绑定器,输出对象结果)
{
返回值.TryGetValue(binder.Name,out结果);
}
}
}

听起来您有VisualStudio设置来在抛出异常时中断。在处理C#对象(包括动态对象)时,仅使用动力学将抛出和处理比您想象的更多的异常。C#binder总是尝试先调用静态版本等,然后抛出RuntimeBindingException,无法找到成员,处理它,然后再次尝试动态版本


Debug>Exceptions
下,确保没有在RuntimeBinderException上检查抛出的
,甚至没有检查所有CLR异常。

这应该有效,检查在代码中添加到字典的值是否正确。它在解决方案之外有效,但在解决方案中无效?-将工作项目导入到解决方案中会使其无法正常工作DynamicObject是您在实际代码中使用的类型吗?发生这种情况的主要原因是内部成员的可访问性…是的,完全一样,只是不调用MyDynamicModel-我认为这是一个内部问题,这就是为什么我创建这个动态模型,它接受一个动态(IDictionary)来将这些成员公开给一个程序集,而不是它创建时所在的程序集。但是,它们位于示例中的同一程序集中,仍然不工作!在VisualStudio之外(即不调试它),它可以工作!