小编Koe*_*oen的帖子

在运行时期间更改日志文件的名称几次

是否可以在应用程序运行时更改fileappender的日志文件名称?它将每天完成几次.

我将尝试更多地阐述自己:我的应用程序在设备上写入固件.用户已经处理过的所有设备都在网格中.用户可以启动新的写入向导,也可以在已启动的设备上恢复或重新启动操作.我想要做的是记录用户为某个设备执行的所有步骤.

例如:当用户在设备AB0124上工作时,我想写一个名为AB0124.log的日志文件.当他结束在该设备上工作并在设备XY5618上启动时,我想在XY5618.log中记录这些操作

我已经读过可以使用context-property(这里这里以及很多其他帖子),但你必须在创建记录器之前设置属性.因此,我不是在类中创建一个记录器,而是在设置属性后在我的方法中创建一个.但到目前为止,没有任何记录.

当我在配置中设置硬编码的文件名时,它正在工作.我在这里错过了吗?

Log4Net.config:

<appender name="StepsLogAppender" type="log4net.Appender.FileAppender">
  <filter  type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="INFO"/>
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
  <file type="log4net.Util.PatternString" value="%property{LogPathModifier}" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{dd/MM/yyyy  -  HH:mm:ss} - %message%newline" />
  </layout>
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="StepsLogAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)

C#:

public void WriteStepInfo(string device, int step)
{
    log4net.ThreadContext.Properties["LogPathModifier"] = string.Format("D:\\StepsDevice_{0}.txt", device);
    var log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    log.Info(string.Format("Device {0} - step {1}.", device, step));
}
Run Code Online (Sandbox Code Playgroud)

AssemblyInfo.cs中:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration log4net-appender

6
推荐指数
1
解决办法
5091
查看次数

IE浏览器中的onbeforeunload问题

我使用下面的代码离开当前页面.它在chrome和mozilla中运行良好,但它在IE 10浏览器中调用每个锚标签.我该怎么做才能防止在IE 10浏览器中调用它?

window.onbeforeunload = function()
{   
   return  "";
};
Run Code Online (Sandbox Code Playgroud)

jquery

5
推荐指数
1
解决办法
1894
查看次数

序列化集合并遵守代码分析

在现有项目上运行代码分析时,我遇到了消息不要公开通用列表集合属性应该是只读的。但是,此类用于从/向 xml 配置文件读取/写入。是否可以让这个类符合CA1002CA2227或者我是否必须禁止这些与 XML 相关的类的规则(项目中有很多)?

编辑

更改List<string>为已Collection<string>解决的 CA1002。仍然不知道如何解决 CA2227 并且仍然能够(反)序列化整个事情。

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Xml.Serialization;

/// <summary>
/// Class containing the Configuration Storage
/// </summary>
[XmlRoot("Configuration")]
public class ConfigurationStorage
{
    /// <summary>
    /// Gets or sets the list of executers.
    /// </summary>
    [XmlArray("Executers")]
    [XmlArrayItem("Executer")]
    public Collection<string> Executers { get; set; }

    /// <summary>
    /// Gets or sets the list of IPG prefixes.
    /// </summary>
    [XmlArray("IpgPrefixes")] …
Run Code Online (Sandbox Code Playgroud)

c# code-analysis xml-serialization .net-4.5

5
推荐指数
1
解决办法
1838
查看次数

基于基类注册类型

我试图找出温莎作为IOC容器.我现在面临的问题是立即注册我的所有视图模型.

我已经看了一下这些文档,并认为以下代码应该可行.但是,当我之后检查容器时,没有注册.

container.Register(Classes.FromThisAssembly()
                          .BasedOn<ViewModelBase>()
                          .LifestyleTransient());
Run Code Online (Sandbox Code Playgroud)

ViewModelBase我的基类在哪里.

还尝试了以下内容:

container.Register(Classes.FromThisAssembly()
         .InSameNamespaceAs<MainWindowViewModel>()
         .LifestyleTransient()); 
Run Code Online (Sandbox Code Playgroud)

可以解决必要的依赖关系,而不是视图模型.我想我在这里遗漏了一些明显的东西?

编辑

我的依赖项注册如下:

this.container.Register(Component.For<IDALHandler>().ImplementedBy<DALHandler>());
this.container.Register(Component.For<IBLHandler>().ImplementedBy<BLHandler>());
Run Code Online (Sandbox Code Playgroud)

UPDATE

由于这些建议不起作用,我计划在这里添加来自我的基类和viewmodel的代码.在这样做时,我注意到我的viewmodel-class是internal sealed.将其更改为时public sealed,上述代码确实有效.

有人可以解释为什么内部类不能在容器中注册吗?我已经用完全相同的设置测试了其他IOC容器,他们没有抱怨它.

castle-windsor ioc-container

2
推荐指数
1
解决办法
4357
查看次数

按字符串数组拆分字符串并保留分隔符

我有这样的事情:

  string[] names= {"john","joe", "jim"};
  data="john,4,3,6,joe,3,6,2,jim,3,6,7";
  string[] results=data.Split(names,StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)

这给了:

 ,4,3,6

 ,3,6,2

 ,3,6,7
Run Code Online (Sandbox Code Playgroud)

但我希望名称也在结果数组中.

c# string

1
推荐指数
1
解决办法
265
查看次数