【问题标题】:How to force a dll to be be accessible at runtime如何强制 dll 在运行时可访问
【发布时间】:2020-08-16 11:38:08
【问题描述】:

在以下代码中,System.Core.dll 没有从编译中输出,因为 .cs 文件中没有使用 LINQ 扩展方法:

using System.Collections.Generic;
using System.Linq;

namespace LinqTestFramework
{
    class Program
    {
        static void Main(string[] args)
        {
            var dict = new Dictionary<int, string>()
            {
                { 1, "David" }
            };
        }
    }
}

但是,在调试期间,我希望能够在 dict 对象上调用 LINQ 扩展方法并在 Watch 窗口中查看结果。

如何在编译后强制包含 System.Core.dll,以便在调试期间可以访问 LINQ 扩展方法?

更新:

我尝试过包含使用 LINQ 的代码。我发现这在编译输出中确实包含 System.Core.dll,但是代码在运行时仍然不可用:

我必须取消注释引用使用 Linq 的代码的那一行,以便能够在 Watch 窗口中的调试期间使用 Linq 扩展方法。

有什么方法可以在调试过程中访问 Linq 扩展方法,而无需参考使用 Linq 扩展方法的代码?

【问题讨论】:

  • 使用Assembly.Load,就可以在调试窗口中使用了。
  • @eocron 在 System.Core.dll 包含在编译输出中时有效。但是为此,我需要编写使用 Linq 的代码(不必调用)。

标签: c# .net linq dll


【解决方案1】:

当我想显式引用一个程序集时,我使用这个扩展:

public static class AssemblyReference
{
    /// <summary>
    /// Installs reference to assembly in which specified type resides.
    /// It will be copied on build even in release mode.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    [MethodImpl(MethodImplOptions.NoInlining)]
    public static void Install<T>()
    {

    }
}

然后您可以使用程序集加载。最简单的当然是从命名空间调用一些东西。

【讨论】:

    【解决方案2】:

    添加一个使用 Linq 的方法。它不必由您的代码实际调用,只需引用即可。

    【讨论】:

    • 我意识到这将在输出中包含 System.Core.dll,但是在调试期间扩展方法仍然不可用(请参阅我更新的问题)。
    • 在你未使用的方法中包含一个扩展函数。
    • 你的意思是 Linq 扩展方法吗?我已经将它包含在那个未使用的方法中,我正在使用 Where()。
    猜你喜欢
    • 2011-12-26
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多