是否可以将WPF窗口打包为COM对象

我正在尝试使用旧版c ++非托管gtk gui应用程序中的WPF窗口。 是否可以打包WPF窗口(包括xaml文件)并在c ++ gui应用程序中将其用作常规com对象。 您是否预见到这种方法存在任何问题或问题? 如果可能的话,任何链接或教程或任何有关如何操作的建议将非常有帮助。 谢谢。

删除没有子节点的父节点

我有一个与从xml文件中删除特定节点有关的问题。 这是我的XML示例: 我想删除节点nodeB=”toRemove”而不删除此节点的子节点。 之后我需要使用nodeB attribute=”placeHolder”做同样的事情。 结果的一部分看起来像这样: 我一直在尝试这样的代码来实现: XmlNodeList nodeList = doc.SelectNodes(“//nodeB[@attribute=\”toRemove\”]”); foreach (XmlNode node in nodeList) { foreach (XmlNode child in node.ChildNodes) { node.ParentNode.AppendChild(child); } node.ParentNode.RemoveChild(node); } doc.Save(XmlFilePathSource); 我能够找到具有所需属性toRemove或placeHolder的节点,但是我无法将此节点的子节点向上移动一级。 在这种情况下你能帮我吗? 它可以是Linq,XDocument,XmlReader的解决方案,但我更喜欢使用XmlDocument。 感谢您提前给我提供的任何帮助。 编辑: 在这种情况下,我使用了稍微修改过的代码(以保持顺序),Chuck Savage写道。 一旦删除 然后再做同样的事情 这是稍微修改过的代码 XElement root = XElement.Load(XmlFilePathSource); var removes = root.XPathSelectElements(“//nodeB[@attribute=\”toRemove\”]”); foreach (XElement node in removes.ToArray()) { node.Parent.AddAfterSelf(node.Elements()); node.Remove(); } […]

如何配置Automapper以自动忽略具有ReadOnly属性的属性?

语境: 假设我有以下“目的地”类: public class Destination { public String WritableProperty { get; set; } public String ReadOnlyProperty { get; set; } } 和一个“source”类,其中一个属性具有ReadOnly属性: public class Source { public String WritableProperty { get; set; } [ReadOnly(true)] public String ReadOnlyProperty { get; set; } } 很明显,但要明确:我将以下列方式从Source类映射到Destination类: Mapper.Map(source, destination); 问题: 有哪些方法可以将Automapper配置为使用ReadOnly(true)属性自动忽略属性? 约束: 我使用Automapper的Profile类进行配置。 我不想弄脏具有Automapper特定属性的类。 我不想为每个只读属性配置Automapper,并且通过这种方式导致大量重复。 可能的(但不适合)解决方案: 1)将属性IgnoreMap添加到属性: [ReadOnly(true)] [IgnoreMap] […]

如何在Windows.Web.Http.HttpClient上停止凭据缓存?

我遇到一个问题,即应用程序尝试使用不同的身份validation方法从同一服务器访问资源,这两种方法是: 证书(NTLM,基础等) OAuth(持票人) 设置HttpBaseProtocolFilter HttpBaseProtocolFilter设置为: 禁用缓存 禁用自动UI凭据请求弹出窗口 码 HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter(); filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache; filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent; filter.AllowUI = false; 添加服务器凭据 如果资源需要凭证,那么我使用: filter.ServerCredential = new PasswordCredential( RequestUri.ToString(), UserName, Password); HttpClient httpClient = new HttpClient(filter); 添加OAuth令牌 如果资源需要Bearer令牌,我使用: HttpClient httpClient = new HttpClient(filter); httpClient.DefaultRequestHeaders.Authorization = new HttpCredentialsHeaderValue(“Bearer”, token); ServerCredential为null filter.ServerCredential = null 从服务器获得响应 using(httpClient) { […]

无法在电脑上打开窗口服务’。’ 在窗口应用程序中

我开发了一个窗口应用程序,我也创建了一个服务。 我在窗口应用程序中使用编码启动服务,但是我收到的错误就是无法在计算机上打开窗口服务’.’ 我使用下面的代码。 ServiceController controller = new ServiceController(“SeoMozScheduleService”); if (controller.Status == ServiceControllerStatus.Stopped) { controller.Start(); } 如果我右键单击应用程序并单击以管理员身份运行,它对我来说工作正常…

如何在asp.net中的动作filter中添加参数?

我有以下filter属性,我可以将字符串数组传递给属性,如[MyAttribute(“string1”, “string2”)] 。 public class MyAttribute : TypeFilterAttribute { private readonly string[] _ids; public MyAttribute(params string[] ids) : base(typeof(MyAttributeImpl)) { _ids = ids; } private class MyAttributeImpl : IActionFilter { private readonly ILogger _logger; public MyAttributeImpl(ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger(); } public void OnActionExecuting(ActionExecutingContext context) { // HOW DO I ACCESS THE IDs VARIABLE […]

如何使用C#正确卸载AppDomain?

我有一个应用程序加载我无法控制的外部程序集(类似于其他人创建和开发主应用程序使用的程序集的插件模型)。 它通过为这些程序集创建新的AppDomain来加载它们,然后在使用程序集完成后,主AppDomain将卸载它们。 目前,它简单地卸载这些组件 try { AppDomain.Unload(otherAssemblyDomain); } catch(Exception exception) { // log exception } 但是,有时会在卸载过程中抛出exception,特别是CannotUnloadAppDomainException 。 根据我的理解,这是可以预料到的,因为由于非托管代码仍在执行或线程在finally块中的情况,子域AppDomains中的线程无法强制中止 : 当线程调用Unload时,目标域将标记为卸载。 专用线程尝试卸载域,并且域中的所有线程都将中止。 如果线程没有中止,例如因为它正在执行非托管代码,或者因为它正在执行finally块,那么在一段时间之后,在最初调用Unload的线程中抛出CannotUnloadAppDomainException。 如果最终无法中止的线程结束,则不会卸载目标域。 因此,在.NET Framework 2.0版域中不保证卸载,因为它可能无法终止执行线程。 我担心的是,如果没有加载程序集,那么它可能会导致内存泄漏。 如果出现上述exception,可能的解决方案是杀死主应用程序进程,但我宁愿避免这种激烈的行为。 我还在考虑重复卸载电话以进行一些额外的尝试。 也许像这样的约束循环: try { AppDomain.Unload(otherAssemblyDomain); } catch (CannotUnloadAppDomainException exception) { // log exception var i = 0; while (i < 3) // quit after three tries { Thread.Sleep(3000); […]

dependency injection和AppSettings

假设我正在为我的应用程序定义一个浏览器实现类: class InternetExplorerBrowser : IBrowser { private readonly string executablePath = @”C:\Program Files\…\…\ie.exe”; …code that uses executablePath } 这可能乍一看看起来像个好主意,因为executablePath数据靠近将使用它的代码。 当我尝试在另一台具有外语操作系统的计算机上运行相同的应用executablePath会出现问题: executablePath将具有不同的值。 我可以通过AppSettings单例类(或其中一个等价物)解决这个问题但是没有人知道我的类实际上依赖于这个AppSettings类(它违背了DI ideias)。 它也可能给unit testing带来困难。 我可以通过构造函数传入executablePath来解决这两个问题: class InternetExplorerBrowser : IBrowser { private readonly string executablePath; public InternetExplorerBrowser(string executablePath) { this.executablePath = executablePath; } } 但是这会在我的Composition Root (将要执行所有需要的类连接的启动方法)中引发问题,因为那个方法必须知道如何连接并且必须知道所有这些小设置数据: class CompositionRoot { public void Run() { ClassA […]

无法解析此引用。 无法找到程序集

每次我构建我的解决方案时都会收到此错误消息; 警告3无法解析此引用。 无法找到程序集“StandardClassLibrary,Version = 1.0.0.0,Culture = neutral,processorArchitecture = MSIL”。 检查以确保磁盘上存在程序集。 如果您的代码需要此引用,则可能会出现编译错误。 StandardClassLibrary 所以我的应用程序有许多项目,其中StandardClassLibrary就是其中之一。 以上消息是一个警告,据我所知,它对我的​​解决方案没有影响。 但我宁愿它不在那里,以防万一……

为什么Funcs不接受超过16个参数?

由于Javascript是我最熟练的语言,因此我熟悉将函数用作第一类对象。 我原以为C#缺少这个function,但后来我听说Func和Action以及delegate ,我认为这非常棒。 例如,您可以声明一个连接两个字符串的Func ,并在它们之间放置一个空格,如下所示: Func concat = (a,b) => a + ” ” + b; 当你输入时我注意到了 Func< IntelliSense显示它有17个重载: delegate System.Func delegate System.Func delegate System.Func …snip… delegate System.Func 那让我开怀大笑。 我查看了Func的MSDN文档并再次笑了起来。 这让我尝试用17个参数声明一个Func 。 它会导致错误( Using the generic type ‘System.Func’ requires 1 type arguments )。 我同意,拥有一个接受超过16个参数的Func可能不是一个好主意。 即便如此,这似乎是Func实施的一种方式。 它需要记录17个简单的不同重载。 这是它真正需要知道的全部内容:最后一个类型参数是返回类型,并且它之前的所有类型参数都是参数类型。 那么,如果我想创建一个超过16个参数的Func ,我该怎么办? 为什么还有限制? 为什么C#不能让你用任意数量的参数声明一个Func ?