小编Gig*_*igi的帖子

新库中的异步与非异步方法

在.NET 4.5中,现在有许多方法可以用于异步和非异步对,例如Flush()FlushAsync().理想情况下,I/O交互在可能的情况下始终是异步的(.Wait()如果您确实需要,可以随时阻止),但非同步(阻塞)版本显然需要保留,因为它们具有向后兼容性.

在推出一个没有向后兼容性限制的全新库时,是否有任何理由可以包含非异步方法?

c# asynchronous task async-await

9
推荐指数
2
解决办法
836
查看次数

无法让XUnit测试与.NET Core一起运行

我正在将NuGet上的一个小型库移植到.NET Core.

我为主项目和测试创建了.NET Standard 1.6类库,并复制了代码.我更改了单元测试以使用XUnit属性和断言而不是NUnit.

除此之外,我几乎遵循文档的说明,因此我添加了以下NuGet包:

  • Microsoft.NET.Test.Sdk
  • 的xUnit
  • xunit.runner.visualstudio

唉,(1)Test Explorer没有找到我的单元测试,(2)当我运行时dotnet test,我得到以下内容:

开始测试执行,请稍候...无法找到testhost.dll for source'[...].Tests.dll'.确保测试项目具有包"microsoft.testplatform.testhost"的nuget引用.

我实际上已经添加了建议的Microsoft.TestPlatform.TestHostNuGet包,但是没有改变任何东西.

那么这里的问题是什么?

我正在使用VS2017.不是说我觉得它有所作为.

更新:更改测试项目Class Library (.NET Standard)Class Library (.NET Core)解决问题.我仍然不明白为什么这应该有所作为.

xunit .net-core

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

WPF中的快速像素绘制

我想用WPF编写一个简单的光线跟踪器.这是一个学习项目,因此我赞成对性能的可配置性(否则我会选择C++).

我仍然想要相对较快的像素绘制.关于StackOverflow 的上一个问题包含通过获取GDI位图在WPF中实现此目的的代码.从我对Windows编程的了解相对较少,

  1. GDI很慢
  2. DirectX很快
  3. WPF下面使用DirectX(不知道WPF的哪些部分)

是否可以通过WPF Canvas(或类似)使用DirectX(而不是GDI)获得像素级访问?

如果可能的话,我还会考虑在WPF窗口(以及其他WPF控件)中合并DirectX API调用的建议.

提前致谢.

c# wpf raytracing

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

从异步编程模型(APM)迁移到基于任务的异步模式(TAP)

.NET中有许多类使用旧的异步编程模型(APM),"不再推荐用于新开发".APM使用Begin/End方法对,End方法将IAsyncResult对象作为参数.一个这样的类是TcpClient,您可以使用它来异步连接,如下所示:

private void SomeMethod()
{
    this.tcpClient = new TcpClient();
    IAsyncResult result = this.tcpClient.BeginConnect(ip, port, EndConnect, null);
}

private void EndConnect(IAsyncResult asyncResult)
{
    this.tcpClient.EndConnect(asyncResult);

    // ... do stuff ...
}
Run Code Online (Sandbox Code Playgroud)

基于任务的异步模式(TAP)是一种更现代的异步编程形式,通过使用asyncawait关键字来促进.

因此,如果您有一个类似TcpClient的类,它使用APM模型并且不公开任何任务,那么如何将其异步方法调整到TAP以便它们可以与async/ 一起使用await

c# asynchronous task async-await

8
推荐指数
2
解决办法
2922
查看次数

.sln.ide文件夹的用途是什么?

我正在尝试Visual Studio 14 CTP 2并注意到这个.sln.ide文件夹:

在此输入图像描述

关于.sln.ide有一些问题(参见,这个这个),但其中两个是关于Visual Studio 2012(不是2014)中具有该扩展名的文件(不是文件夹),其余的问题没有答案.

从我在这些问题中看到的提示看来,该文件夹似乎是由Roslyn编译器创建的,用于缓存目的.但是,我一直无法找到能够准确解释其功能的来源.

那么该文件夹的目的是什么,以及它是如何使用的?

c# visual-studio visual-studio-2015

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

如何在 .NET Standard 类库中指定依赖项?

.NET 标准类库不使用.nuspec文件;项目设置中有一个“包”选项卡,您可以在其中输入 NuGet 包的所有元数据。这些都在.csproj文件中。

我想创建一个包含项目 A 和 B 的解决方案,其中项目 B 依赖于项目 A。两者都需要作为单独的包在 NuGet 上运行。但是如果有人为 B 安装了 NuGet 包,它也应该为 A 安装包。

您如何为 .NET 标准类库指定这个简单的依赖项?我不认为添加引用就足以做到这一点。

nuget-package .net-core .net-standard

8
推荐指数
2
解决办法
2428
查看次数

如何从.NET Core控制台应用程序创建Linux守护程序?

我习惯使用Topshelf创建Windows服务.使用.NET Core和跨平台的前景,这引发了许多有趣的场景:

  1. 鉴于Topshelf尚不支持.NET Core,我如何为.NET Core创建Windows服务?(一种方法可能是创建一个常规的.NET Core控制台应用程序并使用NSSM安装它,但是它不提供启动/停止的挂钩,因此无法正常停止服务).
  2. 你如何在Linux上做同样的事情?没有Windows服务,但有守护进程的概念.这个答案提供了一种基本方法,但需要额外的工作并依赖于某些底层软件.
  3. 上面的#1和#2能否使用跨平台方法完成,或者是否有必要针对每个平台解决这个问题(例如,使用预处理器指令)?

以上主要是上下文.出于这个问题的目的,我想知道我需要采取哪些步骤来使用.NET Core在Linux上运行相当于Windows的服务.如果这可以跨平台以统一的方式完成,那就更好了.

linux daemon .net-core

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

在没有DispatchConsumersAsync = true的情况下解释AsyncEventingBasicConsumer行为

我正在AsyncEventingBasicConsumer使用以下代码尝试RabbitMQ :

static void Main(string[] args)
{
    Console.Title = "Consumer";

    var factory = new ConnectionFactory() { DispatchConsumersAsync = true };
    const string queueName = "myqueue";

    using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
    {
        channel.QueueDeclare(queueName, true, false, false, null);

        // consumer

        var consumer = new AsyncEventingBasicConsumer(channel);
        consumer.Received += Consumer_Received;
        channel.BasicConsume(queueName, true, consumer);

        // publisher

        var props = channel.CreateBasicProperties();
        int i = 0;

        while (true)
        {
            var messageBody = Encoding.UTF8.GetBytes($"Message {++i}");
            channel.BasicPublish("", queueName, props, messageBody);
            Thread.Sleep(50);
        } …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous rabbitmq

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

在 HttpClient 中更改 HttpMessageHandler

HttpClient在其两个构造函数中采用HttpMessageHandler参数。

在创建 HttpClient 后,是否有任何简单的方法可以更改处理程序而无需创建新的 HttpClient 实例?

c# http

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

为什么我们需要在ASP .NET 5 wwwroot中使用web.config?

在ASP .NET 5中,配置正在发生巨大变化.我们不再有web.config文件了.相反,我们可以使用JSON和其他选项,具体取决于我们在Startup课堂上设置的方式.不同的是web.config,此类配置通常不会进入wwwroot,并且客户端无法访问它.

然而,在ASP .NET 5项目模板中,有一个包含以下内容的web.config文件wwwroot:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在我看来,这可能是托管服务器在运行时寻找的东西,独立于应用程序配置.

任何人都可以阐明为什么需要它,以及它是如何工作的?

web-config asp.net-core

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