我有一些代码来加载程序集并获取所有类型,实现某个接口,就像这样(假设asm是一个有效的加载程序集).
var results = from type in asm.GetTypes()
where typeof(IServiceJob).IsAssignableFrom(type)
select type;
Run Code Online (Sandbox Code Playgroud)
现在我陷入困境:我需要创建这些对象的实例并在对象上调用方法和属性.我需要将对已创建对象的引用存储在一个数组中以供以后使用.
我很想知道你用于项目参考的结构类型是什么?
在我工作的地方,开发人员有一个名为AssemblyCache(\\ MACHINENAME\AssemblyCache)的共享文件夹,它通过Windows 2008 AD中的GPO(与开发人员AD组绑定)映射到R:\.
我们的共享组件具有后期构建事件,可将它们复制到以下内容:
R:\.净%VERSION%\ Project \%SOMETHING%
有时它会跟随'Common',如果它是项目的共同点或特定的东西.在.Net版本文件夹下还有一个共享内容的公共目录.
这是多个解决方案的大型项目可以从一个共同的地方引用组件.
构建机器还具有相同共享名称的共享驱动器,开发人员已将其映射到S:.这允许他们在需要时获得最新的工作版本.
所有这一切都是因为有人可以使用新的PC,并打开一个项目,而无需复制对不同位置的引用,并确保dev a引用与dev b等相同位置的程序集...
这个解决方案对我们很有用,所以我想知道你有什么(如果有的话)解决方案来确保所有开发人员从同一路径引用程序集?
有没有办法在C#中知道正在运行的应用程序的类型.
Windows服务ASP.NET Windows窗体控制台
我想对应用程序类型做出反应,但无法找到确定它的方法.
在DLL(GUI)中,我需要获取当前Application中所有命名空间的List(例如,如果我将该DLL绑定到名为"Hundekuchen"的Project中,它应该列出
{ "GUI", "Hundekuchen" }
Run Code Online (Sandbox Code Playgroud)
这有什么内置功能吗?
我想从我的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环境之外运行时不会崩溃.
如何根据系统中存在的程序集使应用程序采取不同的行为?
我知道.exe PE文件中可以包含CLI代码.但如果它有x86代码,它是否被认为是.NET程序集?
我有一个承包商没有给我们的sql程序集的源代码,我需要在那里改变一些东西.有没有什么好方法可以对此进行逆向工程?
想象一下这种情况:
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)
上述断言失败了.即使上面的两个程序集具有不同的版本和位置,第二个调用似乎也会返回第一个程序集.
程序集没有强名称,无法签名.
有没有办法强制框架在相同的上下文和域中加载它们?
场景如下 -
public void MyMethod(IMyInterface object){}
问题是 -
代码 -
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.Emit或RunSharp来google并动态创建自己的类.但是,我们只能在动态生成的程序集中使用它,但不能在现有程序集中创建动态方法或类.
我知道在运行时生成程序集并不是一个好方法.但我现在想不出任何事情.谢谢你的帮助.
assemblies ×10
.net ×7
c# ×7
reflection ×2
azure ×1
cloud ×1
dll ×1
interface ×1
pinvoke ×1
reflector ×1
sql-server ×1
types ×1
verification ×1