0

我正在对OpenXmlSdkTools v2.5进行研究,并在 OpenXmlSdkTools.Core.DLL中有一个潜行高峰,并将其保存为带有ILSpy的 ac# Project 。

虽然这个问题是活跃的,但这里是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\ApplicationExtensions.cs 10

这是代码:

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

4

1 回答 1

2

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

将演员添加到 Action 解决了这个问题

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

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

于 2013-08-31T13:18:08.473 回答