在发布模式下,使用 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();
}
对于这个异常有什么解决办法吗?
将以下行添加到<Application>
运行时指令文件中的节点(通常称为Default.rd.xml
并发现在Properties
文件夹)。
<Namespace Name="System.Linq" Dynamic="Required All" Serialize="Required All" XmlSerializer="Required All"/>
使用Release模式调用.NET Native工具链。它仅在最终应用程序集中包含应用程序实际调用的代码。这会导致某些反射和后期绑定调用代码不包含在您的应用程序中。使用运行时指令文件允许您覆盖默认行为并包含所需的元数据和实现代码。
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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)