有很多类似的问题。但他们都岁了,今天不工作(不再?)。
所以这是我的问题:我想将 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) 我有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)