小编Jul*_*ian的帖子

如何在C#中使用可选参数?

注意:当C#尚未支持可选参数时(即在C#4之前),就会询问此问题.

我们正在构建一个通过C#类以编程方式生成的Web API.该类有方法GetFooBar(int a, int b),API有一个GetFooBar接受查询参数的方法&a=foo &b=bar.

这些类需要支持可选参数,C#语言不支持这些参数.什么是最好的方法?

c# optional-parameters

459
推荐指数
10
解决办法
60万
查看次数

比较NUnit中两个对象之间的相等性

我试图断言一个对象与另一个对象"相等".

对象只是具有一堆公共属性的类的实例.是否有一种简单的方法让NUnit基于属性断言相等?

这是我目前的解决方案,但我认为可能有更好的方法:

Assert.AreEqual(LeftObject.Property1, RightObject.Property1)
Assert.AreEqual(LeftObject.Property2, RightObject.Property2)
Assert.AreEqual(LeftObject.Property3, RightObject.Property3)
...
Assert.AreEqual(LeftObject.PropertyN, RightObject.PropertyN)
Run Code Online (Sandbox Code Playgroud)

我想要的是与CollectionEquivalentConstraint一样的精神,其中NUnit验证两个集合的内容是否相同.

c# nunit automated-tests unit-testing

118
推荐指数
8
解决办法
7万
查看次数

C#通过NameValueCollection迭代

我有一个NameValueCollection,并希望迭代值.目前,我正在这样做,但似乎应该有一个更简洁的方法来做到这一点:

NameValueCollection nvc = new NameValueCollection();
nvc.Add("Test", "Val1");
nvc.Add("Test2", "Val1");
nvc.Add("Test2", "Val1");
nvc.Add("Test2", "Val2");
nvc.Add("Test3", "Val1");
nvc.Add("Test4", "Val4");

foreach (string s in nvc)
    foreach (string v in nvc.GetValues(s))
        Console.WriteLine("{0} {1}", s, v);

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

在那儿?

c# collections namevaluecollection

71
推荐指数
2
解决办法
6万
查看次数

dotnet cli和新的vs2017 msbuild之间的关系

随着从VS2017引入project.json的新csproj格式的转变,我正在努力理解dotnetcli和new 之间的区别msbuild以及何时使用另一个.

1)要csproj从命令行构建新的netstandard库,我应该调用dotnetcli(例如dotnet restore dotnet build)还是使用msbuild(例如msbuild ExampleNetstandard.sln).

2)另外,我的理解是有两个版本msbuild,一个基于完整框架,另一个基于目标dotnet core.它是否正确?我应该经常使用dotnet version

3)是dotnet cli独立还是需要msbuild安装?例如,当您安装dotnet SDK时,这也安装了msbuild吗?如果是这样与vs2017安装的版本不同?

msbuild csproj dotnet-cli visual-studio-2017

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

在Moq中重置模拟验证?

设置如下:

public interface IFoo
{
    void Fizz();
}

[Test]
public void A()
{
    var foo = new Mock<IFoo>(MockBehavior.Loose);

    foo.Object.Fizz();

    foo.Verify(x => x.Fizz());

    // stuff here

    foo.Verify(x => x.Fizz(), Times.Never()); // currently this fails
}
Run Code Online (Sandbox Code Playgroud)

基本上我想// stuff herefoo.Verify(x => x.Fizz(), Times.Never())传递中输入一些代码.

因为这可能构成moq/unit测试滥用,我的理由是我可以这样做:

[Test]
public void Justification()
{
    var foo = new Mock<IFoo>(MockBehavior.Loose);
    foo.Setup(x => x.Fizz());

    var objectUnderTest = new ObjectUnderTest(foo.Object);

    objectUnderTest.DoStuffToPushIntoState1(); // this is various lines of code and setup

    foo.Verify(x => x.Fizz());

    // reset the verification …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq

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

如何在运行时使用NLog获取当前目标文件的路径?

我使用NLog进行下一个配置:

  <targets>
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="f" />
  </rules>
Run Code Online (Sandbox Code Playgroud)

我试图获得(我检查,集合中只有一个FileTarget)的FileName属性FileTarget

NLog.LogManager.GetCurrentClassLogger().Info("test");
var logFile = (from t in NLog.LogManager.Configuration.AllTargets
                where t is NLog.Targets.FileTarget
                select (NLog.Targets.FileTarget)t).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

但是logFile.FileName只包含文件名的模式,确切地说它是如何在设置中指定的.

如何获取当前日志文件的运行时路径?

c# nlog

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

在NLog中使用AppData位置

我的NLog目标是这样的:

<targets>
  <target xsi:type="Console" name="console" 
    layout="${longdate}|${level}|${message}" />
  <target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt"
          layout="${longdate}
          Trace: ${stacktrace} 
          ${message}" />
  <target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt"
          layout="${shortdate} | ${message}" />
</targets>
Run Code Online (Sandbox Code Playgroud)

但是如果用户不是他们机器上的管理员,这会导致问题,因为他们没有"程序文件"的写入权限.我怎样才能得到类似于%AppData%NLog而不是BaseDir的东西?

nlog

47
推荐指数
3
解决办法
2万
查看次数

如何将NLog中的自定义字段记录到数据库中?

我目前在许多项目中使用NLog.在某些情况下,我登录到数据库.

这是我想做的事情:

CREATE TABLE [dbo].[NLogEntries](
  [Id] [bigint] IDENTITY(1,1) NOT NULL,
  [Origin] [nvarchar](100) NOT NULL,
  [LogLevel] [nvarchar](20) NOT NULL,
  [Message] [nvarchar](3600) NOT NULL,
  [CreatedOn] [datetime] NOT NULL,
  [OrderId] [int] NULL --Custom field!
)
Run Code Online (Sandbox Code Playgroud)

NLog.config和这个目标:

<target type="Database" name="database" connectionstring="Server=localhost;Database=NLog;Trusted_Connection=True;">
  <commandText>
    INSERT INTO NLogEntries ([Origin], [Message], [LogLevel],[CreatedOn],[OrderId]) VALUES (@Origin,@Message,@LogLevel,@Date, @OrderId);
  </commandText>
  <parameter name="@Date" layout="${date}"/>
  <parameter name="@Origin" layout="${callsite}"/>
  <parameter name="@LogLevel" layout="${level}"/>
  <parameter name="@message" layout="${message}"/>
  <parameter name="@OrderId" layout="${orderId}"/> <!-- custom field! -->
</target>
Run Code Online (Sandbox Code Playgroud)

然后记录这样的事情:

var logger = LogManager.GetCurrentClassLogger();
var orderId = 123;
logger.Debug("What is going …
Run Code Online (Sandbox Code Playgroud)

c# nlog

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

NLog时间格式

如何编写NLog的布局,以毫秒为单位输出时间11:32:08:123?我用,${date:format=yyyy-MM-dd HH\:mm\:ss}但我的日志需要更多的时间精度.

nlog

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

javascript版本(asp-append-version)如何在ASP.NET Core MVC中工作

似乎新的MVC(链接)中不支持动态捆绑,应该使用gulp任务来完成.MVC支持一些名为的新属性asp-append-version,但我没有找到任何关于它是如何工作的解释.我怀疑它正在计算文件内容的一些哈希值,甚至在文件更改后更新它.有没有关于它是如何工作的文件?

我也想知道它是如何检测文件更改或者它是否只是在每次MVC分析剃刀标记时重新计算哈希值.

c# asp.net-core-mvc asp.net-core

41
推荐指数
3
解决办法
2万
查看次数