Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在通用Windows中将IEnumerable更改为IQueryable时缺少RuntimeArtifactException_C#_Windows 10_Win Universal App_.net 4.6 - Fatal编程技术网

C# 在通用Windows中将IEnumerable更改为IQueryable时缺少RuntimeArtifactException

C# 在通用Windows中将IEnumerable更改为IQueryable时缺少RuntimeArtifactException,c#,windows-10,win-universal-app,.net-4.6,C#,Windows 10,Win Universal App,.net 4.6,在发布模式下,使用AsQueryable方法将IEnumerable源更改为IQueryable,该方法引发System.Reflection.MissingRuntimeArtifactException。这段代码在调试模式下运行良好,请参阅下面的代码段 ObservableCollection<object> data; IEnumerable source; public MainPage() { this.InitializeC

在发布模式下,使用AsQueryable方法将IEnumerable源更改为IQueryable,该方法引发System.Reflection.MissingRuntimeArtifactException。这段代码在调试模式下运行良好,请参阅下面的代码段

    ObservableCollection<object> data;
    IEnumerable source;
    public MainPage()
    {
        this.InitializeComponent();
        data = new ObservableCollection<object>();
        source = data as IEnumerable;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var querab1 = data.AsQueryable();
        var querab2 = source.AsQueryable();
    }
可观测采集数据;
可数源;
公共主页()
{
this.InitializeComponent();
数据=新的ObservableCollection();
source=数据为IEnumerable;
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
var queryab1=data.AsQueryable();
var queryab2=source.AsQueryable();
}

是否有此异常的解决方案?

将以下行添加到运行时指令文件中的
节点(通常称为
Default.rd.xml
,可在
属性
文件夹中找到)


使用发布模式调用.NET本机工具链。它只在最终的应用程序集中包含应用程序实际调用的代码。这会导致某些反射和后期绑定调用代码不包含在应用程序中。使用运行时指令文件可以覆盖默认行为,并包含所需的元数据和实现代码

PS:您的运行时指令文件应该如下所示:

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="*Application*" Dynamic="Required All" />
    <Namespace Name="System.Linq" Dynamic="Required All" Serialize="Required All" XmlSerializer="Required All" />
  </Application>
</Directives>


Hi Lukkha,谢谢您的解决方案。我有一个自定义控件,在我的源代码中,并没有rd.xml文件,但当我将它添加到示例中时,这个解决方案运行良好。是否有任何解决方案可以在代码隐藏中修复此问题?Hi@LukkhaCoder,在对IQueryable使用扩展方法时出现了相同的异常,上面的解决方案正在将IEnumerable更改为IQueryable。但是当使用扩展方法时,它会抛出错误,您能为这个错误共享任何解决方案吗?扩展方法属于哪个名称空间?谢谢Lukkha,上面的解决方案工作得很好。但我面临另一个问题,请参考此链接,因为过于宽泛的指令将导致您的应用程序超出需要(并增加构建时间)。在某些情况下,这将导致序列化生成器在编译期间不必要地崩溃。我们不建议添加序列化(Serialize/XmlSerialize)标记,除非您真的需要它们。
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="*Application*" Dynamic="Required All" />
    <Namespace Name="System.Linq" Dynamic="Required All" Serialize="Required All" XmlSerializer="Required All" />
  </Application>
</Directives>