标签: assemblies

如何使用从程序集动态加载的接口并调用其成员

我有一些代码来加载程序集并获取所有类型,实现某个接口,就像这样(假设asm是一个有效的加载程序集).

var results = from type in asm.GetTypes()
  where typeof(IServiceJob).IsAssignableFrom(type)
  select type;
Run Code Online (Sandbox Code Playgroud)

现在我陷入困境:我需要创建这些对象的实例并在对象上调用方法和属性.我需要将对已创建对象的引用存储在一个数组中以供以后使用.

c# reflection pinvoke assemblies interface

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

团队成员之间的项目装配参考

我很想知道你用于项目参考的结构类型是什么?

在我工作的地方,开发人员有一个名为AssemblyCache(\\ MACHINENAME\AssemblyCache)的共享文件夹,它通过Windows 2008 AD中的GPO(与开发人员AD组绑定)映射到R:\.

我们的共享组件具有后期构建事件,可将它们复制到以下内容:

R:\.净%VERSION%\ Project \%SOMETHING%

有时它会跟随'Common',如果它是项目的共同点或特定的东西.在.Net版本文件夹下还有一个共享内容的公共目录.

这是多个解决方案的大型项目可以从一个共同的地方引用组件.

构建机器还具有相同共享名称的共享驱动器,开发人员已将其映射到S:.这允许他们在需要时获得最新的工作版本.

所有这一切都是因为有人可以使用新的PC,并打开一个项目,而无需复制对不同位置的引用,并确保dev a引用与dev b等相同位置的程序集...

这个解决方案对我们很有用,所以我想知道你有什么(如果有的话)解决方案来确保所有开发人员从同一路径引用程序集?

.net assemblies assembly-reference-path

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

计算出包含在DLL中的类的c#应用程序的类型

有没有办法在C#中知道正在运行的应用程序的类型.

Windows服务ASP.NET Windows窗体控制台

我想对应用程序类型做出反应,但无法找到确定它的方法.

.net c# dll types assemblies

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

保护组件免受黑客攻击

我有一个控制台应用程序引用程序集A.我想确保如果A.dll被篡改或替换,应用程序将无法运行.

一种选择是使用强名称签名.但我是否需要担心强名称绕过

还有其他好的选择吗?

.net verification assemblies data-manipulation digital-signature

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

c#从.dll获取所有名称空间

在DLL(GUI)中,我需要获取当前Application中所有命名空间的List(例如,如果我将该DLL绑定到名为"Hundekuchen"的Project中,它应该列出

{ "GUI", "Hundekuchen" }
Run Code Online (Sandbox Code Playgroud)

这有什么内置功能吗?

c# assemblies

3
推荐指数
2
解决办法
6634
查看次数

我的C#程序如何根据存在的程序集而有所不同?

我想从我的Windows Azure Web应用程序中的自托管Web应用程序中重用一些代码逻辑.目前我的代码如下:

void myFunction( params )
{
   //environment-neutral code
}
Run Code Online (Sandbox Code Playgroud)

我需要重写该代码,以使程序采取不同的行动,具体取决于是否在Azure上:

void myFunctionModified( params )
{
    if( onAzure() ) {
       //run Azure-specific code
    } else {
       //run non-Azure code
    }
}
Run Code Online (Sandbox Code Playgroud)

是的,我知道虚函数,但我需要这样的代码,至少可以在调用那些虚函数之前实例化正确的对象.

问题是实现onAzure()我需要使用仅存在于Windows Azure上的程序集中的东西(RoleEnvironment例如).因此,我不知道如何实现,onAzure()以便在Windows Azure环境之外运行时不会崩溃.

如何根据系统中存在的程序集使应用程序采取不同的行为?

.net c# cloud assemblies azure

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

如果PE文件中包含x86代码,它是否被视为.NET程序集?

我知道.exe PE文件中可以包含CLI代码.但如果它有x86代码,它是否被认为是.NET程序集?

.net assemblies

3
推荐指数
2
解决办法
458
查看次数

反向工程.NET SQL程序集

我有一个承包商没有给我们的sql程序集的源代码,我需要在那里改变一些东西.有没有什么好方法可以对此进行逆向工程?

.net c# sql-server assemblies reverse-engineering

3
推荐指数
2
解决办法
1224
查看次数

当程序集路径和版本不同时,Assembly.LoadFrom返回相同的程序集

想象一下这种情况:

var ass1 = Assembly.LoadFrom(@"C:\Work\3.59\assembly1.dll");
var ass2 = Assembly.LoadFrom(@"C:\Work\3.60\assembly1.dll");

Debug.Assert(ass1 != ass2);
Run Code Online (Sandbox Code Playgroud)

上述断言失败了.即使上面的两个程序集具有不同的版本和位置,第二个调用似乎也会返回第一个程序集.

程序集没有强名称,无法签名.

有没有办法强制框架在相同的上下文和域中加载它们?

.net c# assemblies

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

跨越不同的程序集版本传递类对象

场景如下 -

  • 我有一个组件说'MyAssembly'.接口说'IMyInterface'在此程序集中定义.
  • 在同一个程序集中,我有一个类(MyClass),其中的方法定义如下:

public void MyMethod(IMyInterface object){}

  • 现在,在我的项目中,我创建了一个具有相同名称和确切属性的接口,这些接口由"MyAssembly"中的"IMyInterface"接口公开.
  • 我有一个扩展此接口的类(我在我的项目中创建的那个),我希望将该类的对象作为参数传递给使用反射的不同程序集中的方法"MyMethod".

问题是 -

  • 当我尝试使用反射调用方法时,我得到了"无法将对象转换为类型IMyInterface"的异常.

代码 -

Assembly myAssembly = Assembly.LoadFrom("MyAssembly");
object classObject = myAssembly.CreateInstance("MyClass");
Type classType = myAssembly.GetType("MyClass");
MethodInfo myMethod = classType.GetMethod("MyMethod", BindingFlags.Instance);

// Creating an object of class in the latest assembly and need to pass this
// to method in assembly with different version.
ClassExtendingMyInterface obj= new ClassExtendingMyInterface ();

myMethod.Invoke(classObject, new object[] { obj});
Run Code Online (Sandbox Code Playgroud)

如果,我说得对,这是因为创建的对象是在不同的程序集中,并且该方法所期望的参数是它自己的程序集.

我想到的另一种方法是在类中创建我自己的动态方法,它将接受我的类的对象.

我试图通过Reflection.EmitRunSharp来google并动态创建自己的类.但是,我们只能在动态生成的程序集中使用它,但不能在现有程序集中创建动态方法或类.

我知道在运行时生成程序集并不是一个好方法.但我现在想不出任何事情.谢谢你的帮助.

c# reflection reflector assemblies reflection.emit

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