小编sna*_*nap的帖子

以编程方式重新配置NLog

这是我第一次使用NLog软件包进行日志记录,但到目前为止,它非常适合使用.

在我的场景中,我需要以编程方式初始化我的NLog LoggingConfiguration设置,而不是通过更典型的配置文件方案.我已经对它进行了测试,并将其全部按照默认方式运行.但是,如何在运行时以编程方式修改我的设置?这里最常见的情况可能是默认情况下应用程序的日志记录级别设置为ERROR,但在特定模块中出现错误,我希望将日志记录级别切换为更加冗长以跟踪错误.我想编写一个小的Web界面,以便我可以在运行时轻松调整这些设置,但我想确保我采用正确的方法.

.net logging nlog

35
推荐指数
4
解决办法
3万
查看次数

使用LINQ查询XDocument的最佳方法?

我有一个XML文档,其中包含一系列项目节点,如下所示:

<data>
    <item>
        <label>XYZ</label>
        <description>lorem ipsum</description>
        <parameter type="id">123</parameter>
        <parameter type="name">Adam Savage</parameter>
        <parameter type="zip">90210</parameter>
    </item> 
</data>
Run Code Online (Sandbox Code Playgroud)

我想将它LINQ成一个匿名类型,如下所示:

var mydata =
    (from root in document.Root.Elements("item")
    select new {
       label = (string)root.Element("label"),
       description = (string)root.Element("description"),
       id = ...,
       name = ...,
       zip = ...
     });
Run Code Online (Sandbox Code Playgroud)

根据"类型"属性的值拉取每个参数类型的最佳方法是什么?由于有很多参数元素,你root.Elements("parameter")最终会收集它们.我能想到的最好的方法是通过下面的方法,但我觉得必须有更好的方法吗?

(from c in root.Descendants("parameter") where (string)c.Attribute("type") == "id"
select c.Value).SingleOrDefault()
Run Code Online (Sandbox Code Playgroud)

c# xml linq

16
推荐指数
2
解决办法
4万
查看次数

具有依赖注入的单一类似行为

在对MEF进行一些研究后,我遇到了根据MSDN 的CreationPolicy.Shared属性:

指定CompositionContainer将创建关联ComposablePart的单个共享实例,并由所有请求者共享.

听起来不错,只要我始终确保只有一个容器访问我使用此策略导出的类.那么我该如何确保只有一个容器可以访问我的导出类型呢?这是我的场景:

我有一个Windows服务需要利用类似单一类的内存数据.数据是非持久性的,所以我希望每当服务启动时都会重新创建它,但是一旦服务停止它就没有用处.我的服务中的多个线程需要以线程安全的方式读取和写入此对象,因此我的初始计划是继承ConcurrentDictionary以确保针对它的线程安全操作.

将要攻击这个类的线程都是从一个抽象基类继承的,所以有没有办法让这个类(只有这个类)从MEF导入它并按照我想要的方式工作?

感谢您提供的任何提示,我对MEF很新,所以我还在学习细节

c# extensibility multithreading dependency-injection mef

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

异步读/写到同一个流?

有时,我们需要在 AWS S3 中将大文件从一个存储桶复制到另一个存储桶。只要有可能,我们就使用 CopyRequest 来处理所有在 AWS 上的操作(因为不需要返回客户端的往返)。但有时我们没有选择这样做,因为我们需要在 2 个完全独立的帐户之间复制,这需要GETPUT

问题:

  1. 从 GET 返回的响应流不可搜索,因此无法将其传递给 PUT 请求并使其无缝地从一个流传输到另一个
  2. 使用 CopyTo() 将响应流复制到中间流 (MemoryStream),然后将其传递给 PUT 操作,效果很好,但不能扩展(大文件会抛出 OutOfMemory 异常)

所以基本上我需要一个可以同时读/写的中间流,基本上我会从响应流中读取一个块并将其写入我的中间流,同时 PUT 请求正在读出内容,它只是一个无缝直通类场景。

我在 stackoverflow 上发现了这篇文章,起初看起来很有希望,但它仍然会抛出 OutOfMemory 异常,其中包含大文件。

.NET 异步流读/写

有人曾经做过类似的事情吗?你会如何处理?提前致谢

.net c# io

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

System.Diagnostics.Process.Start针对不同域的进程

我们有一个场景,我们需要我们的用户能够使用与当前登录时不同的域启动SQLServer并对其进行身份验证.所以要澄清这个设置的方式:

  1. 用户到达办公室并登录到公司域(为简单起见,我们称之为LOCALDOMAIN)
  2. 他们希望连接到不同域上的远程数据库(让我们称之为REMOTEDOMAIN)
  3. 首先,他们启动VPN工具,建立到REMOTEDOMAIN的VPN隧道(这一切都经过测试,效果很好)
  4. 但如果他们默认启动SSMS,它只允许通过LOCALDOMAIN进行Windows Auth,选择REMOTEDOMAIN的选项甚至不可用

我们发现从命令行运行它将起作用:

RUNAS /user:REMOTEDOMAIN\AUserName /netonly "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe
Run Code Online (Sandbox Code Playgroud)

它将提示"输入REMOTEDOMAIN\AUserName:的密码:",如果您提供了正确的密码,SSMS将启动并可以连接到远程dbs.但是,当我尝试在C#中使用更好的界面做同样的事情时,我得到"登录失败:未知用户名或密码错误",这是我的代码:

System.Security.SecureString password = new System.Security.SecureString();
foreach(char c in txtPassword.Text.ToCharArray()){
    password.AppendChar(c);
}
System.Diagnostics.ProcessStartInfo procInfo = new System.Diagnostics.ProcessStartInfo();
procInfo.Arguments = "/netonly";
procInfo.FileName = @"C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe"; ;
procInfo.Domain = "REMOTEDOMAIN";
procInfo.Verb = "runas";
procInfo.UserName = txtUsername.Text;
procInfo.Password = password;
procInfo.UseShellExecute = false;
System.Diagnostics.Process.Start(procInfo);
Run Code Online (Sandbox Code Playgroud)

我尝试使用带有和没有域预先填写的用户名,但都不起作用.有人试图做类似的事吗?谢谢

.net c# process

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

为什么我的64位服务以32位运行?

我有一个遇到此问题的Windows服务。

  • 在Visual Studio中,我已将其平台目标设置为64位
  • 我已经运行CorFlags来验证它的设置正确,我得到了:
Version   : v4.0.30319
CLR Header: 2.5  
PE        : PE32+
CorFlags  : 0x1    
ILONLY    : 1       
32BITREQ  : 0        
32BITPREF : 0        
Signed    : 0
Run Code Online (Sandbox Code Playgroud)

我什至尝试使用32BITREQ-32BITPREF-标志运行Corflags以确保将其设置为应该的值,但没有骰子。在taskManager中,它显示为:

MyServiceName(32位)

该服务与Topshelf 3.0一起安装,并且在Windows Server 2012 R2 Standard上运行。这里发生了什么?

c# windows service 64-bit corflags

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

将 .NET Core 环境传递给 React.JS 应用程序

使用 .NET Core,在 Startup.cs 中,您可以访问 IHostingEnvironment,您可以从中获取 EnvironmentName,它对应于在服务器上设置的 ASPNETCORE_ENVIRONMENT 环境变量的值。这对于打开/关闭各种功能以及使用特定于环境的配置非常有用。但是对于一个全是 React.JS 的前端,有没有办法向下传递这个值,以便前端也知道它的环境?我可以想到一些可能的方法来完成,但它们看起来有点笨拙。这方面的最佳做法是什么?

.net javascript reactjs asp.net-core featuretoggle

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

NUnit类别未显示在Visual Studio中

我想通过函数自定义我的测试组,所以我使用nunit Category属性,如下所示:

[Test, Category("Cat1")]
public void SomeMethod() { }

[Test, Category("Cat2")]
public void AnotherMethod() { }
Run Code Online (Sandbox Code Playgroud)

但是在Visual Studio中,类别没有显示,我看到的只是按持续时间或测试结果分组的默认值.我正在使用:

  • NUnit 2.6.4
  • Visual Studio 2012
  • NUnit测试适配器2.0.0.0

我错过了什么?这似乎应该是一个明智的选择

nunit unit-testing visual-studio-2012

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

具有[授权]的环境相关控制器

要将控制器标记为需要授权,通常可以像这样装饰它:

[Authorize]
public class MyController : Controller
Run Code Online (Sandbox Code Playgroud)

我们的身份验证是通过第三方提供商进行的,并且考虑到它的设置方式,我们只希望它在我们的生产环境中实际生效,我们不希望它在 QA 环境中处于活动状态。在 Startup.cs 文件中关闭环境很容易,但是有没有办法有条件地装饰控制器?我开始研究政策和角色,看起来可能会被黑客入侵,但有更好的方法吗?

c# asp.net authorization controller

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

为什么这个LINQ查询不能按预期工作?

假设我有一个名为MyClass的类,它有两个属性(int Id和一个字符串Name).我想从另一个集合中填充这些MyClass对象的List,但我只想要唯一的.这个其他集合是第三方对象,它有一个名为'Properties'的属性,它只是一个值数组,前两个对应于我关心的Id和Name值.这个系列可能有重复,所以我只想要独一无二的.

似乎这应该做的伎俩,但它没有,它返回所有项目,无论欺骗.我在这做错了什么?

List<MyClass> items = (from MyClass mc in collectionOfProps 
select new MyClass() { 
Id = collectionOfProps.Properties[0], 
Name = collectionOfProps.Properties[1] }).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

c# linq

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