小编Wol*_*oth的帖子

动态加载和卸载 c# 程序集到 appdomain

有很多类似的问题。但他们都岁了,今天不工作(不再?)。

所以这是我的问题:我想将 ac# 程序集加载到内存中,并找出它是否包含与我想使用的接口匹配的类型。如果程序集包含此类类型,我会在主应用程序中引用并使用它。如果没有,我想卸载 dll,然后能够删除文件(从我的主应用程序或在应用程序运行时手动删除)。

我的第一个实现只是省略了 appdomain 方法,但它有效(不删除或替换程序集文件)。然后我尝试按照各种示例中的描述加载程序集。但是没有我能够从磁盘中删除不需要的程序集文件。

当程序集在应用程序中被引用时,根本无法卸载和删除它们,或者我做错了什么。这是我最后尝试的:

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Windows.Forms;
using ESTLogViewer_V2.Formulare;
using Parent;
namespace ESTLogViewer_V2
{
    static class Program
    {
        //<summary>
        //Der Haupteinstiegspunkt für die Anwendung.
        //</summary>
        [STAThread]
        static void Main()
        {
            LoadTest.Haupt(null);
        }
    }
}
namespace Parent
{
    public class Constants
    {
        // adjust
        public const string LIB_PATH = @"e:\PRJDOTNET4\ESTLogViewer V2\Plugins\LogFiles_Plugin.dll";
    }

    public interface ILoader
    {
        string Execute();
    }

    public class Loader : MarshalByRefObject, ILoader
    {
        public …
Run Code Online (Sandbox Code Playgroud)

.net c# .net-assembly

1
推荐指数
1
解决办法
1599
查看次数

为什么当我在监视视图中观察基类对象时,VS2017为什么向我显示派生类的成员值?

我有3个类别的类别层次结构:KlasseA,KlasseB和KlasseC。KlasseC继承自KlasseB。KlasseB继承自KlasseA。

这些类中的每一个都有各自的int类型的属性A,B和C以及字段a,b和c:

public class KlasseA
{
    private int a;

    public int A { get => a; set => a = value; }
}
public class KlasseB: KlasseA
{
    private int b;

    public int B { get => b; set => b = value; }
}
public class KlasseC: KlasseB
{
    private int c;

    public int C { get => c; set => c = value; }
}
Run Code Online (Sandbox Code Playgroud)

(我省略了不必要的构造函数和检查逻辑)

现在,我可以编写以下代码:

class Program
{
    static void Main(string[] args)
    {
        KlasseA aKlasse;
        KlasseB …
Run Code Online (Sandbox Code Playgroud)

c# watch class-hierarchy

1
推荐指数
1
解决办法
111
查看次数

标签 统计

c# ×2

.net ×1

.net-assembly ×1

class-hierarchy ×1

watch ×1