Tag: 运行时

以编程方式添加Project引用

基本上,在阅读了几个链接后,我尝试了上面的代码: foreach (EnvDTE.Project proj in soln.Projects) { if (proj.Name == “BLL”) { VSLangProj.VSProject vsproj = (VSLangProj.VSProject)proj.Object; vsproj.References.Add(@”C:\Teste\DAL\bin\Debug\DAL.dll”); } } 所有路径,项目名称都在purpouse上进行了硬编码,因为我仍在测试如何实现它。 虽然它会像我做项目文件夹 – >引用 – >添加引用 – >选择一个,手动(编译时) 但在加载解决方案后,BLL项目没有包含对DAL项目的任何PERMANENT引用。

将行添加到WPF数据网格中,直到运行时才知道列

我正在尝试向数据网格添加数据(事实上,任何在网格中显示数据的控件都会这样做),但是直到运行时才会知道列(名称和数字)。 我知道如何创建的列:例如 DataGridTextColumn textColumn = new DataGridTextColumn(); textColumn.Header = column.DisplayName; MyDataGrid.Columns.Add(textColumn); 但是我该如何添加行? 我没有看到如何使用绑定,因为我的数据不包含在具有已知属性的对象中。 例如,每行的数据可能以字符串[]的forms出现。 所以有一次我可能有三列,另一次我可能有五列。 我当时希望能够做到这样的事情: // Example data to represent a single row. string[] row1 = new[] { “value1”, “value2”, “value3” }; var row = new Row; row.AddCell(row1[0]); row.AddCell(row1[1]); row.AddCell(row1[2]); MyDataGrid.Rows.Add(row);

.NET运行时如何移动内存?

众所周知,.NET垃圾收集器不只是“删除”堆上的对象,而且还使用内存压缩来对抗内存碎片。 根据我的理解,基本上将内存复制到一个新的地方,旧的地方在某些时候被删除。 我的问题是:这是如何工作的? 我最感兴趣的是GC在一个单独的线程中运行,这意味着我们正在处理的对象可以在我们执行代码时由GC移动。 问题的技术细节 为了说明,让我更详细地解释一下我的问题: class Program { private int foo; public static void Main(string[] args) { var tmp = new Program(); // make an object if (args.Length == 2) // depend the outcome on a runtime check { tmp.foo = 12; // set value *** } Console.WriteLine(tmp.foo); } } 在这个小例子中,我们创建一个对象并在对象上设置一个简单变量。 点’***’对问题来说很重要:如果’tmp’的地址移动,’foo’会引用不正确的东西,一切都会破坏。 垃圾收集器在单独的线程中运行。 所以据我所知,’tmp’可以在这个指令中移动,’foo’最终会得到不正确的值。 […]

如何在运行时更改语言而不会出现布局问题

我有一个winforms应用程序,用户必须能够在运行时更改语言。 为了概括开关并避免硬编码控制名称,我尝试了以下扩展: internal static void SetLanguage(this Form form, CultureInfo lang) { ComponentResourceManager resources = new ComponentResourceManager(form.GetType()); ApplyResourceToControl(resources, form, lang); resources.ApplyResources(form, “$this”, lang); } private static void ApplyResourceToControl(ComponentResourceManager resources, Control control, CultureInfo lang) { foreach (Control c in control.Controls) { ApplyResourceToControl(resources, c, lang); resources.ApplyResources(c, c.Name, lang); } } 这确实改变了所有字符串。 然而,这样做的副作用是,无论当前大小是多少,窗口的整个内容都会调整为该窗口的原始启动大小。 如何防止布局更改或启动新的布局计算?

使用在运行时确定的类型参数调用generics函数

我有一个问题涉及使用在运行时已知的类型参数调用类的generics方法。 具体来说,代码如下所示: FieldInfo[] dataFields = this.GetType().GetFields( BindingFlags.Public | BindingFlags.Instance ); // data is just a byte array used internally in DataStream DataStream ds = new DataStream( data ); foreach ( FieldInfo field in dataFields ) { Type fieldType = field.FieldType; // I want to call this method and pass in the type parameter specified by […]

在运行时加载nuget依赖项

我正在寻找一种通过执行以下步骤来运行代码的方法: 接收NuGet包列表(元组列表(“包名”,“包版本”,“主类路径”)。 在本地目录中检索它们(参见代码示例#1) 在运行时将它们加载到我的程序中 通过内省运行主类(参见代码示例#2) 到现在为止,我正在努力迈出第三步。 我无法在运行时找到如何加载我的包。 我的主要问题是: 如何找出存储检索到的包的文件夹? 如何将这些目录的内容加载到我的程序中? 谢谢你的帮助。 代码示例#1: private static void getPackageByNameAndVersion(string packageID, string version) { IPackageRepository repo = PackageRepositoryFactory.Default .CreateRepository(“https://packages.nuget.org/api/v2”); string path = “C:/tmp_repo”; PackageManager packageManager = new PackageManager(repo, path); Console.WriteLine(“before dl pkg”); packageManager.InstallPackage(packageID, SemanticVersion.Parse(version)); } 代码示例#2: private static void loadByAssemblyNameAndTypeName(string assemblyName, string typeName) { AppDomain isolationAppDomain = AppDomain.CreateDomain(“tmp”); object […]

在.NET中,在运行时:如何从Type对象获取类型的默认值?

可能重复: 类型的默认值 在C#中,要获取Type的默认值,我可以写… var DefaultValue = default(bool);` 但是,如何为提供的Type变量获取相同的默认值? public object GetDefaultValue(Type ObjectType) { return Type.GetDefaultValue(); // This is what I need } 或者,换句话说,“默认”关键字的实现是什么?

创建运行时确定类型实例的最佳方法

在.NET 4中创建在运行时确定的类型实例的最佳方法是什么? 我有一个实例方法,虽然作用于BaseClass对象可能会被其派生类的实例调用。 我需要在方法中创建与this类型相同的另一个实例。 为每个派生类重载Method是不切实际的,因为它相当复杂,并且更有效地保持单个实现。 public class BaseClass { //constructors + properties + methods etc public SomeMethod() { //some code DerivedClass d = new DerivedClass(); //ideally determine the DerivedClass type at run-time } } 我已经阅读了一些关于reflection或使用动态关键字但我没有这些经验。

创建一个“拼写检查”,用合理的运行时检查数据库

我不是要求实现拼写检查算法本身。 我有一个包含数十万条记录的数据库。 我要做的是检查用户输入针对所有这些记录的表格中的某个列,并返回任何具有一定汉明距离的匹配(同样,这个问题不是关于确定汉明距离等)。 当然,目的是创建一个“你是说”的function,用户搜索名称,如果在数据库中找不到直接匹配,则返回可能匹配的列表。 我试图想出一种方法,在最合理的运行时间内完成所有这些检查。 如何以最有效的方式检查用户对所有这些记录的输入? 该function目前已实现,但运行时速度非常慢。 它现在的工作方式是将所有记录从用户指定的表(或多个表)加载到内存中 ,然后执行检查。 为了它的价值,我正在使用NHibernate进行数据访问。 如果我能做到这一点或我的选择是什么,我将不胜感激。

在运行时编译C#数组并在代码中使用它?

我知道C#代码可以在运行时使用C#编译 。 但是,因为我几分钟前刚读过这篇文章,所以我非常不满意。 我通过例子学到了很多东西。 所以告诉我。 如果我想编译类似的东西: // MapScript.CS String[] LevelMap = { “WWWWWWWWWWWWWWWWWWW”, “WGGGGGGGGGGGGGGGGGW”, “WGGGGGGGGGGGGGGGGGW”, “WWWWWWWWWWWWWWWWWWW” }; 并在我的代码中使用此数组,我该怎么做呢? 在伪代码中我想做这样的事情: Open(“MapScript.CS”); String[] levelMap = CompileArray(“levelMap”); // use the array