C# 在通用Windows中将IEnumerable更改为IQueryable时缺少RuntimeArtifactException
在发布模式下,使用AsQueryable方法将IEnumerable源更改为IQueryable,该方法引发System.Reflection.MissingRuntimeArtifactException。这段代码在调试模式下运行良好,请参阅下面的代码段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
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>