是否可以从我的应用程序中导出DLL定义?
我在代码库中有代码,我不熟悉我想清理和锁定测试用例. 我面临的问题是 a)编写它的开发人员不再与公司合作,而且看来没有使用标准,也没有进行过代码审查,因此甚至没有评论(变量被命名为A,B和C和C功能是200行长...嗯) b)编写它的开发人员有一个方形的孔洞心态(即,"嘿,我刚刚学到的这个新功能真的很酷,我认为我会滥用它的痛苦") c)重写其功能 是令人难以置信的凌乱,无证件和非平凡的任务 也就是说,代码是意大利面条,我已经缩小了一个部分进行大量反射的部分.发出的调用是动态地制作执行工作的DLL.这是完成手头的任务的超越信念,但请参阅B点. . 我一半想说"忘记此",然后重写代码,以便我可以用测试锁定它.另一半想要挽救那里的东西,因为我知道它有效,我的客户每天都使用代码,这并不容易. 有什么办法可以做以下操作? foreach(Assembly a in AppDomain.CurrentDomain.GetAssemblies()) {
12 2024-04-26
编程技术问答社区
获取继承类的DLL文件名
我有一个抽象类编译到DLL中(让我们称其为BaseClass.dll),它是其他类别继承的基础.这些其他类也被编译到DLL(让我们称之为InheritedClass.dll>)中,可以用作我的主要应用程序的插件,可以在每个插件中调用与抽象类迫使它们实现的相同方法. 但是,所有插件都会有一些功能,因此,如果我可以在基类中实现这些功能.这减少了冗余,也消除了在实施该功能时撰写插件以犯错误的人的可能性. 一个这样的示例是一个代码,需要编译DLL文件的名称.可以这样工作的方法可以这样: public string GetName() { return System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase); } 问题在于GetExecutingAssembly()返回当前正在运行的代码的程序集,而不是已编译其所收集的汇编.因此,如果我将上述函数放入基
8 2024-04-26
编程技术问答社区
如何确定类是否继承字典<,>
我有 public class SerializableDictionary : Dictionary, IXmlSerializable 我想检查一个对象是否是序列化(任何通用类型的).​​ 我尝试了: type == typeof(SerializableDictionary) or type.isSubclass() or typeof(SerializableDictionary).isAssigneableFrom(type) 什么都没有. 我如何判断类型是序列化或任何类型的类型? tnx! 解决方案 var obj = new List(); // new SerializableDictionary(); var type = obj.GetType(); var dictType = typeof(Serializabl
4 2024-04-26
编程技术问答社区
为一个已知类型为T的通用接口构建一个System.Type。
问题描述 我有一个接口定义IFoo : IFoo和一个方法CreateFooUsingBarType(Type barType).我需要使用定义TBar的指定的System.Type 实例System.Type 实例来解决IFoo的方法.不要问我如何到这里.我被困在这些边界中. 示例 public IFoo CreateFooUsingBarType(Type barType) { var iocScope = GetScope(); // TODO: Create a System.Type for IFoo // where TBar is barType. Blarghity blargh. var fooType = (Type)null; return iocScope.Resolve(fooType); } 我已经尝试用 typebuilder ,但我觉得这太过杀了. .N
0 2024-04-26
编程技术问答社区
由对象掩盖的内部类
假设(B)的公共功能具有返回行: return (object)(new List{Some elements}) a是内部和密封类.我无法更改A或B. 的代码 在B中调用此功能后,如何找到该列表的第一个元素. C#不允许我将列表归还List,因为A是内部的. 解决方案 仅仅因为您可以读取源代码或拆卸代码,因此您不应依靠当前实现,而是尝试使用公共接口. List实现了非生成IList,因此您可以送回IEnumerable或IList如果您真的在寻找麻烦. 其他解决方案 您可以将通用列表投入到非传统iEnumerable上,迭代该列表,然后使用object.toString()获取有关B实例的信息,或者您只需返回参考. Object obj = new List () { "dd", "ee" }; IEnumerable enumerable = obj as IEnumerable; bool foundSom
12 2024-04-26
编程技术问答社区
反编译的HtmlDocument'的InvokeScript不工作
这是我使用ILSPY的代码: public static object InvokeScript(this IHTMLDocument2 document, string scriptName, object[] args = null) { object result = null; UnsafeNativeMethods.tagDISPPARAMS tagDISPPARAMS = new UnsafeNativeMethods.tagDISPPARAMS(); tagDISPPARAMS.rgvarg = IntPtr.Zero; try { UnsafeNativeMethods.IDispatch dispatch = ((IHTMLDocument)document).Script as UnsafeNativeMethods.IDispatch; if (dispatch != null)
2 2024-04-26
编程技术问答社区
如何在c#中从不同于System的命名空间获取类型?
我想创建类型时 .在这里很明显: Type t = System.Type.GetType("System.Double"); 但是,当我尝试从其他名称空间(例如System.Drawing)获得类型时,上述方法不会返回正确的类型.我发现的工作解决方案: Assembly foundAssembly = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(assembly => assembly.GetName().Name == "System.Drawing"); Type t = foundAssembly.GetType("System.Drawing.Color"); 但是,它看起来很纯净,我想这样做需要一段时间(AppDomain.CurrentDomain在我的情况下有22个组件,但乘以10000,这是一件).那么我们可以更快地得到它吗?我不是在寻找type = typeof(System.Dr
18 2024-04-26
编程技术问答社区
实体框架-确定给定类型的HasDatabaseGeneratedOption设置
对于我的数据库中的某些属性,我需要手动计算其ID#,因此对于那些属性,我在OnModelCreating> 中进行.Property(p => p.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None); 然后,在存储库中,我有一种计算给定类型的ID的方法.我希望让系统变得聪明,并检查DatabaseGeneratedOption.None或DatabaseGeneratedOption.Identity是否返回下一个ID或0. 如何检查(从存储库中)给定类型(t)的DatabaseGeneratedOption是什么? 解决方案 感谢George的评论,我能够提出此解决方案: bool? _sqlGeneratesID; bool IRepository.IsStoreGeneratedId
2 2024-04-26
编程技术问答社区
使用反射调用 "内部外部 "构造函数
我有以下课程(如反射器所见) public class W : IDisposable { public W(string s); public W(string s, byte[] data); // more constructors [MethodImpl(MethodImplOptions.InternalCall)] internal extern W(string s, int i); public static W Func(string s, int i); } 我试图使用反射 来称呼"内部外部"构造函数或功能 MethodInfo dynMethod = typeof(W).GetMethod("Func", BindingFlags.Static); object[] argVals = new object[] { "hi", 1 }; dynMethod.Invo
16 2024-04-26
编程技术问答社区
反思-为什么我不能访问这个HttpRequest属性?
我正在使用以下方法来输出及其属性的对象.它可以与大多数对象一起使用,但是当我通过httprequest对象时会抛出. public static string ConvertToXML(object obj) { if (!obj.GetType().IsPrimitive && obj.GetType() != typeof(String) && obj.GetType() != typeof(Decimal)) { List properties = new List(); foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) { string name = descriptor.Name;
6 2024-04-26
编程技术问答社区
如果 exe 没有清单,如何用反射加载 exe?
我有一个可执行文件的转储(运行时:v2.0.50727).它效果很好,没有任何错误.我可以将其加载到DNSpy进行调试或ILSPY.他们俩都告诉所有参考文献都成功解决了. 但是,我无法使用此代码加载它: try { var second_module = System.Reflection.Assembly.LoadFrom("myprog.bin"); } catch (Exception e) { Console.WriteLine(e.ToString()); } 它给我以下错误: System.BadImageFormatException: Could not load file or assembly 'file:///myprog.bin' or one of its dependencies. The module was expected to contain an assembly manifest. File name: 'fi
2 2024-04-26
编程技术问答社区
获取继承类的物理文件名
我很遗憾地不得不向我已经问过的一个问题提出类似的问题,但我已经被抓住了,但是我希望有人能再次让我走上正确的道路. (这里的原始问题:获取dll dll的dll classited class )) 我有一个抽象类,称为PluginBase.dll,其他各种类也从中继承.这些都是为服务器应用程序编译为不同的插件.让我们看一下这些插件之一,称为PluginMessaging.dll,该插件具有一个称为PluginMessaging.dll.config 的配置文件 读取配置设置的方法在基类中,看起来如下: private void ReadConfig() { _runningDir = System.IO.Path.GetDirectoryName(GetType().Assembly.Location); _pluginFile = System.IO.Path.GetFileName(GetType().Assembly.Location); _
10 2024-04-26
编程技术问答社区
C#使用带有类型的通用方法
我正在使用.NET Framework 2.0尝试执行以下操作: 我有一个外部服务,它返回int列表.反过来,我使用每个int来找到具有带有属性键的属性的相应类型;该属性的值与搜索参数匹配. 使用类型t我想调用通用方法,但我无法做到这一点.我只知道运行时的类型,我怀疑我可能必须使用反射来调用通用方法GetResultsForType - 这是正确的方法吗? [MyAttribute(key1 = 1)] class A{ //some properties } [MyAttribute(key1 = 2)] class B{ //some properties } //and so on (for hundreds of classes). The key is unique for every class. public class Foo{ public void DoSomething(){ IList
2 2024-04-26
编程技术问答社区
如何将字符串转换为任何类型的对象?
我需要从包含数据的字符串转换为使用反射传递的某些类型的对象.我有一个不可属性的对象,其中包含任何类型的属性,我想将数据加载到该对象. 例如,该对象具有属性,Color BgColor.当我尝试将"红色"值设置为该属性时,我无法从字符串到颜色.我需要一般代码. 解决方案 尝试但就您而言,我认为 Color.FromName 方法是最好的: 从预定义的颜色的指定名称中创建一个颜色结构. 其他解决方案 如果您需要做的就是将字符串转换为enum中的值,则可以使用类似于以下代码的代码: public static T ToEnum(this string original) { Array values = Enum.GetValues(typeof(T)); foreach (T value in values) { if (value.ToString().ToUpperInvariant() == origin
0 2024-04-26
编程技术问答社区
使用反射来执行一个带参数的方法,在GetParameters中引发异常
我有一个控制台应用程序,我正在测试输入命令的基本能力: 编辑 AddUser id=1 name=John surname=Doe 编辑 假设方法添加剂看起来像这样: public AddUser(int id, string name, string surname { //add code here to add user } 这是我的代码: protected void Process(string command) { //get the type Type type = this.GetType(); //do a split on the command entered var commandStructure = command.Split(' '); try { //reassign the command as only the method name
2 2024-04-26
编程技术问答社区
如何清除动态对象内部的值?
我正在将数据集转换为动态集合并绑定它时,这可以正常工作.我正在尝试获取数据杂志的项目源,并在列表中获取第一个对象.但是它里面有一些值.如何删除值并使用反射绑定空对象. 这是我的代码 IEnumerable collection = this.RetrieveGrid.ItemsSource.Cast(); List list = collection.ToList(); //i need to clear the values inside list[0] object name = list[0]; //here i build the properties of the object, now i need to create an empty object using these properties and add it to the list PropertyInfo[]
8 2024-04-26
编程技术问答社区
使用表达式访问嵌套属性和集合
我有以下类: public class Person { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("age")] public int Age { get; set; } [JsonProperty("country")] public string Country { get; set; } [JsonProperty("profession")] public Profession Profession { get; set; } [JsonProperty("hobbies")] public List Hobbies { get; set; } } public class Profession { [JsonProperty("name")] publi
10 2024-04-26
编程技术问答社区
我如何用一个给定的ElementType创建一个数组类型的实例?
如何创建一个类型对象,该对象代表具有给定元素类型的数组的类型? Type t = MakeArrayType(elementType); // How? 使得 Assert(t.GetElementType() == elementType); 我可以创建我所请求的数组的虚拟实例,然后从那里获取类型.但是我想知道是否有一种方法可以在不先创建实例的情况下获取类型? object myArrayInstance = Array.CreateInstance(elementType, 0); Type t = myArrayInstance.GetType(); // This is the desired type. 解决方案 如果t是指Type,则t.GetType()显然是typeof(Type)或subtype -not typeof(Array). 但是,我怀疑您想要 Type.MakeArrayType : Type arrayTy
0 2024-04-26
编程技术问答社区
如何使用OpCodes.Call来生成这个代码
这个问题与以下问题有关:带有代码的铸造项目一代 由于上一个问题还不够清楚,所以这是我精确地需要帮助. 如何使用opcodes.call生成此代码: return Enumerable.ToList(Eumerable.Cast(_proxyPotatoes)); 这是我要做的示例: public class Potato { } public class ProxyPotato : Potato { } public class Stew { private ICollection _proxyPotatoes; //This is the code I would like to generate (specialy the cast part) public ICollection Potatoes { get { return _proxyPotatoes
6 2024-04-26
编程技术问答社区
使用FastActivator来代替Activator.CreateInstance()。
尝试将此处显示的类用作激活剂的样本.Createinstance() http://codeblocks.codeplexs.codeplex.com/wikipage?title=fasteractivator = fasteractivator; public static List SortedCollection(SPListItemCollection items, ListSortType sortType, List votes) where T : IVotable { var returnlist = new List(); var functionCreator = FastActivator.GenerateFunc, T>>(); for (int i = 0; i
10 2024-04-26
编程技术问答社区