使用anon方法和委托错误重新编译OpenXmlSdkTool.Core DLL
本文关键字:编译 OpenXmlSdkTool DLL Core 新编译 方法 anon 错误 使用 | 更新日期: 2023-09-27 18:29:54
我正在研究OpenXmlSdkTools v2.5,在OpenXmlSbkTools.Core.DLL中有一个偷偷的峰值,并用ILSpy将其保存为c#项目。
当这个问题处于活动状态时,这里有OpenXmlSdkTools.Core.DLL,可以快速重现我遇到的问题
当我试图编译单个类库项目时,我得到了两个错误,关于对程序集"System.Xaml"的错误引用。例如:
类型"System.Windows.Markup.IQueryAmbient"是在未引用的程序集。必须添加对程序集的引用'System.Xaml
类型"System.Windows.Markup.IUriContext"是在程序集中定义的未被引用。必须添加对程序集的引用'System.Xaml
所以我添加了参考
在那之后,我陷入了我希望是最后一个编译错误的困境,我无法解决它。
无法将匿名方法转换为类型"System.Delegate",因为它不是委托类型C:''TFS''ABC''src''OpenXmlSdkTool.Core''DocumentFormat.OpenXml.Tools''ApplicationExtension.cs10
这是代码:
using System;
using System.Windows;
using System.Windows.Threading;
namespace DocumentFormat.OpenXml.Tools
{
public static class ApplicationExtensions
{
public static void DoEvents(this Application application)
{
application.Dispatcher.Invoke(DispatcherPriority.Background, delegate
{
});
}
}
}
我很困惑,它是一个反编译的DLL,应该很容易再次重新编译。你认为我添加Xaml引用会导致这个问题吗?如果Core.DLL是一个类库项目,而ILSpy没有将其包含在csproj文件中,为什么我需要添加Xaml引用?
我看了这里所有的其他问题,都有同样的错误,但没有一个真正有帮助。
更新
将System.Xaml.dll添加为对项目的引用时。接口在那里声明。这是医生。
所以现在我在Catch22中,如果我添加Xaml dll,它将解决前两个错误,但随后它将导致另一个错误。
在我的机器上重现问题后,我发现http://staceyw1.wordpress.com/2007/12/22/they-are-anonymous-methods-not-anonymous-delegates/(从将此委托转换为匿名方法或lambda中引用)。
向Action添加演员阵容解决了问题
application.Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate
{
});
但可能还有其他解决方案。