使用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,它将解决前两个错误,但随后它将导致另一个错误。

使用anon方法和委托错误重新编译OpenXmlSdkTool.Core DLL

在我的机器上重现问题后,我发现http://staceyw1.wordpress.com/2007/12/22/they-are-anonymous-methods-not-anonymous-delegates/(从将此委托转换为匿名方法或lambda中引用)。

向Action添加演员阵容解决了问题

application.Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate
        {
        });

但可能还有其他解决方案。