Tag: .net

嵌入并安装了IronPython – dll版本混乱

我有一个嵌入了IronPython的应用程序,并使用它来执行用户编写的脚本。 只安装我的应用程序时,一切都按预期工作。 我已经嵌入了IronPython 2.7.4 dll(安装后我的exe和IronPython dll在同一个文件夹中)。 但是,在某些客户端计算机上安装了IronPython 2.7.2。 它将其dll安装到GAC中,我的应用程序最终使用它们,而不是我随应用程序和应用程序一起提供的dll。 这导致我的应用程序失败,因为我使用了2.7.2中没有的属性。 问题是.NET出于某种原因认为这些程序集具有相同的版本(2.7.0.40)。 如下图所示,文件版本不同: 正确的一个是我随应用程序发货的那个,左边一个是IronPython 2.7.2附带的一个。 我没有向GAC注册任何内容,但这是在GAC中注册的内容(IronPython安装添加了它): C:\ $ gacutil /l | findstr IronPython IronPython, Version=2.7.0.40, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL IronPython.Modules, Version=2.7.0.40, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL 如您所见,它们已注册为2.7.0.40版。 我的问题是 – 如何强制我的应用程序使用2.7.4.1000版本的IronPython程序集而不是在GAC中注册的2.7.2.1001? 为什么.NET忽略版本号的第三个组件并且可以更改? 编辑 : 如果它很重要,安装了IronPython 2.7.2,我的程序失败并出现以下错误: 未处理的exception:System.MissingMethodException:找不到方法:’Boolean IronPython.Hosting.PythonConsoleOptions.get_BasicConsole()’。

TextRenderer.MeasureText()和文本框最大文本长度

我有一个长串(约100k字符)。 我需要知道这个字符串的长度。 我打电话 Size s = TextRenderer.MeasureText(graphics, text, font); 但它返回宽度等于7.只有当文本长度<= 43679时,它才会返回正确的值! 此外,如果我在文本框中插入文本,文本在文本框中不可见! 我可以用鼠标选择文本,通过“Ctrl + C”复制,但文本不可见。 MaxLength属性大于文本长度。 我查看了msdn,但没有找到有关MeasureText和TextBox中使用的最大文本长度的任何信息。 我在哪里可以找到关于此的文档? 有没有办法增加最大文本长度? 这些值取决于操作系统和计算机性能吗?

使用Entity Framework在数据库中搜索文本

我正在编写一个UI,允许某人通过他们的名字和/或姓名查找用户。 例如,如果您输入“Mike”作为名字,输入“Jo”作为姓氏,则会返回“Mike Jones”,“Mike Johnson”和“Mike Jobs”。 我在此搜索中使用以下LINQ语句: var users = (from u in context.TPM_USER where u.LASTNAME.ToLower().Contains(LastName.ToLower()) && u.FIRSTNAME.ToLower().Contains(FirstName.ToLower()) select u); (可能有或没有更好的方法来做一个不区分大小写的类似条款,但这似乎有效) 问题是如果用户输入名字或姓氏,但是将另一个字段留空。 如果我输入“Mike”作为名字并将“姓氏”字段留空,我想要返回所有Mikes而不管他们的姓氏。 除非两个字段至少填充了某些字段,否则上述查询不会返回任何结果。 我试过了: var users = (from u in context.TPM_USER where (LastName == “” || u.LASTNAME.ToLower().Contains(LastName.ToLower())) && (FirstName == “” || u.FIRSTNAME.ToLower().Contains(FirstName.ToLower())) select u); 但是,除非两个字段都填写完毕,否则我仍然没有结果。 我在调试器下validation了LastName == “”确实是真的。 更新: 我做了一些调试,这实际上是一个Oracle问题。 生成的查询是: –Replaced the field […]

Reflection.Emit:如何可靠地将MethodBuilder转换为RuntimeMethodInfo?

在动态生成类型并调用TypeBuilder.CreateType之后,我想创建一个指向新类型中的方法的委托。 但是,如果我使用像 loadedType = typeBuilder.CreateType(); myDelegate = (MyDelegate)Delegate.CreateDelegate( typeof(MyDelegate), methodBuilder); 将methodBuilder重用为methodInfo,我得到exception“MethodInfo必须是RuntimeMethodInfo”。 现在通常我可以重新获取MethodInfo MethodInfo mi = loadedType.GetMethod(methodBuilder.Name); myDelegate = (MyDelegate)Delegate.CreateDelegate(typeof(MyDelegate), mi); 但我的类可能包含几个具有相同名称的重载方法。 我怎样才能确保我找到合适的? 方法是否有一些我可以在loadedType中查找的持久标识符? 更新:好的,这是我用来重新获取MethodInfo的内容。 我只是希望我能确定它在所有情况下都有效。 private static MethodInfo ReacquireMethod(Type type, MethodInfo method) { BindingFlags flags = BindingFlags.DeclaredOnly; flags |= (method.IsPublic ? BindingFlags.Public : BindingFlags.NonPublic); flags |= (method.IsStatic ? BindingFlags.Static : BindingFlags.Instance); MethodInfo m = type.GetMethod(method.Name, […]

如何在不使用OrderBy的情况下从Point数组中获取具有最小X的Point?

想象一下,我有 var points = new Point[] { new Point(1, 2), new Point(2, 3) }; 要获得最小XI的要点可以: var result = points.OrderBy(point => point.X).First(); 但对于大型arrays,我认为这不是更快的选择。 还有更快的选择吗?

查询x64-GAC

使用以下代码,我正在查询GAC以查看是否安装了某个程序集。 代码本身工作正常,但我只得到x86 GAC的结果。 该程序集安装在GAC GAC_64和GAC_32中。 我需要做什么才能使’QueryAssemblyInfo’检查x64 GAC? public bool IsInGac(string assemblyName) { ASSEMBLY_INFO assembyInfo = new ASSEMBLY_INFO(); assembyInfo.cchBuf = 512; assembyInfo.currentAssemblyPath = new string(‘\0’, assembyInfo.cchBuf); IAssemblyCache assemblyCache = null; IntPtr hr = NativeMethods.CreateAssemblyCache(out assemblyCache, 0); if (hr == IntPtr.Zero) { hr = assemblyCache.QueryAssemblyInfo(1, assemblyName, ref assembyInfo); if (hr != IntPtr.Zero) { return false; } return […]

Automapper项目使用

我目前正在后端使用automapper将对象映射到模型。 我最近决定使用以下代码来处理所有时区转换: cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours)); cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours).Value); Object.ProjectTo().SingleOrDefault(); 然后它工作正常,对象被映射和时区转换 但是当我在业务层中使用以下代码来执行单个对象映射时: Mapper.Map(singleRecord); 它给出了一个错误:只能从LINQ to Entities调用此函数。 堆栈跟踪 : at System.Data.Entity.DbFunctions.AddHours(Nullable`1 timeValue, Nullable`1 addValue) at lambda_method(Closure , DateTime , DateTime , ResolutionContext ) at AutoMapper.ResolutionContext.Map[TSource,TDestination](TSource source, TDestination destination) at lambda_method(Closure , Inventory , InventoryModel , ResolutionContext ) Mapper.Map在特定场景中很重要,我也不想投影单个记录。 这有什么方法吗?

具有消息队列的任务处理状态

我正在研究一个产品数据导入系统,该系统从外部源下载产品数据,将其转换为正确的模式,并存储结果 – 实际上是一个ETL系统。 系统处理的核心消息类型是“ImportProductCommand”,它指定要导入的产品和源。 但是,导入命令很少单独发送。 典型的业务需求是从给定的源导入一整套产品。 目前,这表示为“ImportProductsCommand”消息,可以指定要导入的多个产品。 命令处理程序使用此消息,将其转换为单独的“ImportProductCommand”消息,并将它们发送到队列进行处理。 单个导入请求的使用者发布“ProductImportedEvent”或“ProductImportFailedEvent”。 收到“ImportProductsCommand”消息后,服务会为消息分配GUID标记,将消息放入队列,然后返回标记。 然后将令牌用作相关ID,以便可以将单个导入请求与批量导入请求相关联。 给定此基础结构,可以确定与给定令牌关联的事件数,从而确定导入产品或失败导入的数量。 缺少的是一个显式事件,表明批量导入已完成。 单个导入请求的处理程序未明确意识到它是批量导入请求的一部分。 当然,这可以通过了解要导入的产品数量以及通过计算与特定相关ID关联的导入事件的数量来推断。 当前实现利用消息队列系统来处理进程重新启动和失败,但对批量导入请求不太明确。 总的来说,系统需要回答的查询是: 是否完成了给定的批量导入? 给定批次导入剩余多少个别导入? 完成了多少个别import? 有多少是错的? 有哪些最佳实践或建议的方法来支持这些查询,并仍然利用消息排队系统来实现弹性? 目前,将它们联系在一起的是上面提到的令牌,但是没有明确的记录来表示批量导入请求实体,如果有,那么单个导入请求处理器需要知道这样的实体来更新地位相应。 所有这些都是使用C#,NServiceBus实现的,并作为IIS WCF应用程序托管。

在命令行而不是VisualStudio中从我的EDMX生成C#实体文件

我有一个.edmx文件,当我在VisualStudio中打开它时会生成C#实体文件并点击“保存”操作。 如何从命令行执行此操作? 我想在尝试编译之前设置一个可以执行此操作的CI环境…

ASP.NET StackedColumn图表 – Axis Trouble

我正在构建一个Asp.net Stacked Column图表。 以下是它的外观: 以下是它的外观: 忽略图表上的数字,但是看看X轴 – 为什么它没有出现在数据中时给我1148,1153,1163。 这是我的数据: 这是代码: Dim chart As New Chart chart.ID = “Chart1” Dim chartareas As New ChartArea chart.ChartAreas.Add(chartareas) chart.DataBindCrossTable(DtFinalRecords.DefaultView, “OutcomeScore”, “TermID”, “RecordsPerGroup”, “Label=RecordsPerGroup”) chart.ChartAreas(0).AxisX.MajorGrid.Enabled = False chart.ChartAreas(0).AxisY.MajorGrid.Enabled = False For Each cs As Series In chart.Series cs.ChartType = SeriesChartType.StackedColumn Next pnlcharts.Controls.Add(chart) 任何帮助,将不胜感激。 谢谢!