Tag: c#

prism:ViewModelLocator.AutoWireViewModel =“True”对于未引用的程序集不起作用

我在引导程序中加载我的模块: protected override IModuleCatalog CreateModuleCatalog() { var moduleCatalog = new DirectoryModuleCatalog(); moduleCatalog.ModulePath = @”.\Modules”; return moduleCatalog; } 在shell项目中引用模块的项目时,它可以正常工作。 正确的ViewModels将由以下附加属性注入。 <UserControl prism:ViewModelLocator.AutoWireViewModel="True" [..] 除非删除项目引用,否则棱镜将不再设置ViewModel:ViewModelLocator.AutoWireViewModel =“True”。 有谁知道是什么原因引起的? 您可以在项目https://github.com/mfe-/Get.the.solution.Prism.Demo上观察此行为。 我怎样才能解决这个问题?

为什么我需要引用一个我没有直接使用的dll?

我有从外部开发人员那里收到的源代码,这个代码分为4种类型的项目:他们的框架,我的项目的环境(让我们称之为“ENV”),应用程序库(称之为“Base”)和应用程序本身(大约20个dll我将统称为“App”)。 现在,我已经为这个混乱添加了另一层,一个名为AdvanceFeatures的dll。 它位于ENV(框架顶部)的正下方。 这个dll只引用框架,ENV引用它。 只有ENV使用这个AdvanceFeatures dll,而Base和App只使用ENV。 我在这里工作的方式是App中的大多数对象都在Base中定义,并在ENV中inheritance/实现类/接口。 这些对象中的一小部分(在App和Base中)从框架本身inheritance/实现类/接口(但这种情况非常罕见)。 除了一个事实,到目前为止一切都很顺利。 编译器要求我将从App中的每个dll和Base中添加对AdvanceFeatures dll的引用。 我没有在ENV之外使用AdvanceFeatures,那么为什么需要这些引用呢? 编辑:我已经为这个问题创建了一个演示项目。 这是项目细节: Assembly: AdvanceFeatures References: Nothing (Reference project-folder is empty) Classes: Decorator, IEnvClass, IDecorator IDecorator contents: namespace AdvanceFeatures { public interface IDecorator { IEnvClass Decorated { get; } void Decorate(); } } IEnvClass contents: namespace AdvanceFeatures { public interface IEnvClass { string Name […]

C#big-endian UCS-2

我目前正在开发的项目需要与我们没有建立的客户端系统进行交互,因此我们无法控制数据的发送方式。 问题是在C#中工作,它似乎对UCS-2没有任何支持,对big-endian的支持很少。 (据我所知) 我想知道的是,如果我在.net中查看过任何内容,或者其他人已经制作并发布了我们可以使用的内容。 如果不是,我将采用自定义方法对其进行编码/解码,如果可能的话。 但无论如何,谢谢你的时间。 编辑:BigEndianUnicode 确实正确解码字符串,问题是接收其他数据作为大端,到目前为止使用IPAddress.HostToNetworkOrder()如其他地方建议允许我解码一半的字符串(Merli?是出现的和它应该是Merlin33069) 我梳理短代码,看看是否错过了另一个长度变量 解决方案:在确定了bigendian变量是主要问题后,我回过头来查看详细信息,似乎字符串的长度是以字符数发送的,而不是字节数(在utf中它似乎是char是两个所有我需要做的就是加倍,然后就解决了。 感谢大家的帮助。

在C#/ .NET中访问MAX_PATH之外的文件

背景 我需要编写一个使用.NET 2.0版本的工具(由于政治,商业和机密性/信任原因,使用现成的东西不是这个客户的选项)通过网络将文件从一个服务器迁移到另一个服务器。 服务器是本地团队的文件服务器,需要将某些团队文件夹迁移到其他服务器以便于重组。 基本的想法是我们读取每个文件并在数小时内通过网络流式传输,几天后数据将被迁移。 需要保留文件权限。 由于这需要几天时间(我们正在谈论几千兆字节的数据,对于某些团队而言),我们需要每晚迭代文件并比较修改日期并更新已更改的日期。 理论上,最终新服务器将拥有最新的文件副本,用户可以切换到新服务器。 它当然不是那么简单,但我们有一个我们认为应该工作的设计:) 问题 所以从理论上讲,我们只需打开文件,通过网络流式传输,然后在另一端写入,对吧? 🙂 不幸的是,在服务器本身,文件共享是在文件夹路径创建的,例如: D:\ Data \ Team Shares \ DIVISION \ DEPARTMENT \ NAME OF TEAM – 可能会长篇大论 对于每个用户,此路径映射到驱动器,例如,它将作为\\ SERVER \ TEAMNAME共享并映射到T:驱动器。 这导致了从T:驱动器可见的文件在MAX_PATH限制范围内的情况,但是当在服务器本身上本地查看时,它们会超出它。 我们无法使用网络共享来访问文件,因为这个工具需要是通用的,要在数百个这样的服务器上运行,并且没有标准的方法来判断哪些文件共享是我们应该移动的文件共享,哪些不是 – 有甚至没有命名约定标准。 此外,偶尔会有其他股份的子股,因此我们超过MAX_PATH限制两倍! 我知道使用“\\?\”前缀指定路径的解决方法,该路径将路径视为UNC路径,并允许理论上最多32k个字符。 这种解决方法是在Win32 API级别实现的,System.IO命名空间(大部分)基本上只是本机Win32 API函数的一个薄包装,但是在将调用交给API之前,Microsoft已经“帮助”实现了额外(不正确)的validation。 。 在这种情况下,.NET Framework拒绝该路径,因为它声称’?’ 是一个无效的路径字符。 所以我的问题是……有没有一种方法我没有想到这将允许我解决这个问题,而不必完全重写几乎整个System.IO命名空间,加载P / Invoke调用,只是为了删除这个烦人的validation?

GridView上的弹出式引导程序模型使用RowCommand事件进行单击

我有一个Bootstrap Model弹出窗口: × ADD NEW BANQUET Banquet ID: Banquet Name: 而GridView是: <asp:Label ID="lblID" runat="server" Visible="false" Text='’> <asp:Label ID="lblName" runat="server" Text='’ > Events 这是RowCommand事件: protected void gvBanquet_RowCommand(object sender, GridViewCommandEventArgs e) { GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer); int index = row.RowIndex; string id = GetTextFromGridViewLabel(gvBanquet,index,”lblID”); string name = GetTextFromGridViewLabel(gvBanquet, index, “lblName”); switch (e.CommandName) { case “EditRow”: lblID.Text = […]

entity framework核心:在上一个操作完成之前,在此上下文中启动了第二个操作

我正在使用Entity Framework Core开发ASP.Net Core 2.0项目 在我的一个列表方法中,我收到此错误: InvalidOperationException: A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe. Microsoft.EntityFrameworkCore.Internal.ConcurrencyDetector.EnterCriticalSection() 这是我的方法: [HttpGet(“{currentPage}/{pageSize}/”)] [HttpGet(“{currentPage}/{pageSize}/{search}”)] public ListResponseVM GetClients([FromRoute] int currentPage, int pageSize, string search) { var resp = new ListResponseVM(); var items = _context.Clients .Include(i => i.Contacts) […]

ASP.NET MVCunit testing自定义AuthorizeAttribute

我正在研究ASP.NET MVC 4项目(.NET框架4),我想知道如何正确地unit testing自定义AuthorizeAttribute(我使用NUnit和Moq)。 我AuthorizeCore(HttpContextBase httpContext)了2个方法: AuthorizeCore(HttpContextBase httpContext)和HandleUnauthorizedRequest(AuthorizationContext filterContext) 。 正如您所看到的,这些方法分别需要HttpContextBase和AuthorizationContext ,但我不知道如何模拟它们。 这是我得到的: [Test] public void HandleUnauthorizedRequest_UnexistingMaster_RedirectsToCommonNoMaster() { // Arrange var httpContext = new Mock(); var winIdentity = new Mock(); winIdentity.Setup(i => i.IsAuthenticated).Returns(() => true); winIdentity.Setup(i => i.Name).Returns(() => “WHEEEE”); httpContext.SetupGet(c => c.User).Returns(() => new ImdPrincipal(winIdentity.Object)); // This is my implementation of IIdentity var requestBase […]

Dapper和MS Access – 读取工作,写入不起作用

让我们首先解决这个问题:我使用MS Access DB时遇到困难,我无法改变它。 这很好用: using (OleDbConnection conn = ConnectionHelper.GetConnection()) { conn.Open(); var results = conn.Query( “select FirstName from Students where LastName = @lastName”, new { lastName= “Smith” } ); conn.Close(); } 这很好用: using (OleDbConnection conn = ConnectionHelper.GetConnection()) { OleDbCommand cmd = new OleDbCommand( “update Students set FirstName = @firstName, City = @city where LastName = […]

从WebBrowser访问DOM

我正在尝试实现类似浏览器的小应用程序,这将允许我修改查看的网站外观(例如,使链接的字体更大)。 它专为Microsoft Surface设计,可用于巨大的触摸屏。 它使用WPF作为UI。 我打算使用WebBrowser控件来完成此任务。 但是,文档中有两个名为WebBrowser的类。 其中一个在System.Windows.Forms ,另一个在System.Windows.Controls 。 第一个提供对DOM模型的访问,但是用于Forms应用程序(如果我理解正确,那绝对不是我拥有的)。 如果在xaml中添加控制器,则默认添加第二个,但它不提供对DOM的访问。 那么,如何从WebBrowser for Surface访问DOM模型? 我对c#和Microsoft技术都很陌生,所以如果我的问题不清楚或明显,我会道歉。

具有静态类的竞争条件?

假设我有一个带静态方法的静态类。 多个线程可以同时调用此静态方法。 在这些情况下是否存在竞争条件: a – if the method depends only on local variables b – if the method depends on local variables and member fields