标签: system.reflection

LoadFile和LoadFrom与.NET程序集之间的区别?

我正在查看msdn文档,我仍然对使用LoadFileLoadFrom加载程序集之间的区别究竟有点困惑.有人可以提供一个例子或类比来更好地描述它.MSDN文档让我更加困惑.此外,它是ReflectionOnlyLoadFrom相同的,LoadFrom只是它只在反射模式下加载程序集.

由于我的.NET经验并不是最好的,因此以下是有关使用LoadFile的MSDN文档的一些问题:

1)LoadFile检查具有相同标识但位于不同路径的程序集是什么意思?身份是什么(例子)?

2)它声明LoadFile不会将文件加载到"LoadFrom上下文"中,并且不会使用加载路径解析依赖关系.这是什么意思,有人可以提供一个例子吗?

3)最后,它声明LoadFile在这种有限的场景中很有用,因为LoadFrom无法加载具有相同身份但路径不同的程序集; 它只会加载第一个这样的组件,这再次带给我同样的问题,组件标识是什么?

.net assemblies assembly-loading system.reflection

119
推荐指数
3
解决办法
5万
查看次数


传递可以"适合"接口的C#参数,但实际上并没有实现它

注意:我知道这在实践中是一个糟糕的主意; 我只是好奇CLR允许你做什么,目的是创建某种'在创建它后修改类'预处理器.

假设我有以下类,它在另一个程序集中定义,所以我无法更改它.

class Person {
    public string Greet() => "Hello!";
}
Run Code Online (Sandbox Code Playgroud)

我现在定义一个接口和一个方法,如下所示:

interface IGreetable {
    string Greet();
} 

// ...

void PrintGreeting(IGreetable g) => Console.WriteLine(g.Greet());
Run Code Online (Sandbox Code Playgroud)

该类Person没有明确的实现IGreetable,但它可以不对其方法进行任何修改.

有了这个,有什么方法,使用Reflection,DLR或其他任何东西,其中一个实例Person可以成功传递到PrintGreeting不修改上面的任何代码?

c# reflection class system.reflection

33
推荐指数
3
解决办法
2425
查看次数

C#获取调用程序集的父程序集名称

我有一个我正在研究的C#单元测试应用程序.涉及三个程序集 - C#app本身的程序集,应用程序使用的第二个程序集,以及第二个程序集使用的第三个程序集.

所以这些电话是这样的:

First Assembly ------> Second Assembly---------> Third Assembly.
Run Code Online (Sandbox Code Playgroud)

我在第三个程序集中需要做的是获取调用第二个程序集的Fist Assembly的名称.

Assembly.GetExecutingAssembly().ManifestModule.Name
Assembly.GetCallingAssembly().ManifestModule.Name
Run Code Online (Sandbox Code Playgroud)

返回第二个程序集的名称.和

Assembly.GetEntryAssembly().ManifestModule.Name
Run Code Online (Sandbox Code Playgroud)

返回NULL

有没有人知道是否有办法获得第一届大会的集会名称?

按照其他用户的要求,我把代码放在这里.这不是100%的代码,而是遵循这样的代码.

namespace FirstAssembly{
public static xcass A
{
        public static Stream OpenResource(string name)
        {
            return Reader.OpenResource(Assembly.GetCallingAssembly(), ".Resources." + name);
        }
}
}

using FirstAssembly;
namespace SecondAssembly{
public static class B 

{
public static Stream FileNameFromType(string Name)

{
return = A.OpenResource(string name);
}
}
}
Run Code Online (Sandbox Code Playgroud)

和测试项目方法

using SecondAssembly;
namespace ThirdAssembly{
public class TestC
{

 [TestMethod()]
        public void StremSizTest()
        {
            // ARRANGE
            var …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection system.reflection

32
推荐指数
5
解决办法
2万
查看次数

显式调用静态构造函数

我想为下面的课程编写单元测试.
如果名称不是"MyEntity",则mgr应为空白.
负单元测试
使用Manager私有访问器我想将名称更改为"Test",以便mgr应为null.然后将验证mgr值.为了实现这一点,我想显式调用静态构造函数,但是当我使用静态构造函数调用时

Manager_Accessor.name = "Test"
typeof(Manager).TypeInitializer.Invoke(null, null); 
Run Code Online (Sandbox Code Playgroud)

name始终设置为"MyEntity"如何将名称设置为"Test"并调用静态构造函数.

public class Manager
{        
        private static string name= "MyEntity";

        private static object mgr;

        static Manager()
        {
            try
            {
                mgr = CreateMgr(name);
            }
            catch (Exception ex)
            {
                mgr=null;
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

c# mstest static-constructor system.reflection

32
推荐指数
2
解决办法
2万
查看次数

GetProperty反射导致新属性上出现"模糊匹配"

我如何获得我的财产?目前发生错误Ambiguous match found,请参阅代码中的注释行.

public class MyBaseEntity
{
    public MyBaseEntity MyEntity { get; set; }
}

public class MyDerivedEntity : MyBaseEntity
{
    public new MyDerivedEntity MyEntity { get; set; }
}

private static void Main(string[] args)
{
    MyDerivedEntity myDE = new MyDerivedEntity();

    PropertyInfo propInfoSrcObj = myDE.GetType().GetProperty("MyEntity");
    //-- ERROR: Ambiguous match found
}
Run Code Online (Sandbox Code Playgroud)

c# reflection system.reflection

30
推荐指数
4
解决办法
3万
查看次数

如何在.NET Core中发出类型

在C#中,如何在运行时使用.NET Core发出新的Type?我可以在.NET 6中找到的所有示例似乎都不适用于.NET内核(它们都是从获取当前AppDomain开始的,而后者在.NET内核中不再存在).

如果可能的话,我将会感谢一个涉及创建Type并向Type添加属性的示例.

c# reflection.emit system.reflection

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

使用Reflection在对象初始化之前设置静态变量值?

无论如何设置尚未初始化的对象上的静态(私有)变量的值?该SetValue方法需要一个实例,但我希望有办法解决这个问题.

c# reflection system.reflection c#-2.0

24
推荐指数
1
解决办法
2万
查看次数

我需要一个永远不会返回null的`Assembly.GetEntryAssembly()`的替代品

我需要找到托管代码执行开始的程序集.

// using System.Reflection;
Assembly entryAssembly = Assembly.GetEntryAssembly();
Run Code Online (Sandbox Code Playgroud)

这似乎是要走的路,但MSDN参考页面Assembly.GetEntryAssembly说明这个方法"[c]从非托管代码调用时返回null."

在这种情况下,我想知道哪个程序集是由非托管代码调用的.

有没有可靠的方法来做到这一点,即总是返回非空Assembly引用?

.net c# system.reflection entry-point

23
推荐指数
2
解决办法
1万
查看次数

如何使用Reflection调用自定义运算符

在我的小项目中,我正在使用System.Reflection类来生成可执行代码.我需要调用+自定义类型的运算符.有谁知道如何使用C#反射调用自定义类的自定义运算符?

c# reflection operator-overloading operators system.reflection

22
推荐指数
2
解决办法
4704
查看次数