标签: coreclr

如何在Asp.Net Core中注册同一接口的多个实现?

我有来自相同接口的服务

public interface IService { }
public class ServiceA : IService { }
public class ServiceB : IService { } 
public class ServiceC : IService { }
Run Code Online (Sandbox Code Playgroud)

通常,其他IOC容器Unity允许您通过某些Key区分它们来注册具体实现.

在Asp.Net Core中,我如何注册这些服务并在运行时根据某些键解决它?

我没有看到任何通常用于区分具体实现的AddService方法keyname参数.

    public void ConfigureServices(IServiceCollection services)
    {            
         // How do I register services here of the same interface            
    }


    public MyController:Controller
    {
       public void DoSomeThing(string key)
       { 
          // How do get service based on key
       }
    }
Run Code Online (Sandbox Code Playgroud)

工厂模式是唯一的选择吗?

Update1
我已经阅读了这里 …

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

183
推荐指数
21
解决办法
9万
查看次数

为什么在发布和调试模式下代码行为有所不同?

请考虑以下代码:

private static void Main(string[] args)
{
    var ar = new double[]
    {
        100
    };

    FillTo(ref ar, 5);
    Console.WriteLine(string.Join(",", ar.Select(a => a.ToString()).ToArray()));
}

public static void FillTo(ref double[] dd, int N)
{
    if (dd.Length >= N)
        return;

    double[] Old = dd;
    double d = double.NaN;
    if (Old.Length > 0)
        d = Old[0];

    dd = new double[N];

    for (int i = 0; i < Old.Length; i++)
    {
        dd[N - Old.Length + i] = Old[i];
    }
    for (int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

.net c# .net-core coreclr

82
推荐指数
2
解决办法
4406
查看次数

是否可以在.NET核心中制作桌面GUI应用程序?

我已经开发了几年的winforms程序.我现在正在研究.NET核心(包括ASP.NET核心MVC).我正在寻找新的GUI桌面技术.在visual studio 2015 update 3中我看不到任何选项在.NET核心中制作GUI应用程序.我错过了什么?

.net-core coreclr

78
推荐指数
10
解决办法
6万
查看次数

如何在.NET Core中写入文件?

我想使用.NET Core中的蓝牙LE功能(特别是BluetoothLEAdvertisementWatcher)来编写将信息记录到文件的扫描程序.这是作为桌面应用程序运行,最好是作为命令行应用程序运行.

System.IO.StreamWriter(string)这样的构造函数显然不可用.如何创建文件并写入文件?

我会很高兴能够做一个System.Console.WriteLine(字符串),但似乎在.NET Core下也没有.

更新:为了澄清,如果我有一个看起来像这样运行的程序没有错误,我将参加比赛.

using System;
using Windows.Devices.Bluetooth.Advertisement;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
            Console.WriteLine("Hello, world!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新2:这是project.json文件:

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

该命令的输出dotnet -v run包含此错误消息:

W:\src\dotnet_helloworld>dotnet -v run
...
W:\src\dotnet_helloworld\Program.cs(2,15): error CS0234: The type or namespace name 'Devices' does …
Run Code Online (Sandbox Code Playgroud)

.net c# bluetooth coreclr

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

ASP.NET Core中的PostAsJsonAsync方法在哪里?

PostAsJsonAsync在ASP.NET核心中寻找扩展方法.根据这里的文章,它在Microsoft.AspNet.WebApi.Client组装中可用.不过我虽然微软已将所有程序集名称从Microsoft.AspNet更改Microsoft.AspNetCore为更具体的.Net Core框架.但我找不到Microsoft.AspNetCore.WebApi.Client

PostAsJsonAsyncASP.NET核心中的扩展方法在哪里?

c# .net-core coreclr asp.net-core

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

如何在.Net核心应用程序中发布特定于环境的应用程序?

appsettings我的.Net核心应用程序中有3个特定于环境的文件

在此输入图像描述

project.json我这样设置publishOptions.(根据此处的建议)

"publishOptions": {
    "include": [
      "wwwroot",      
      "appsettings.development.json",
      "appsettings.staging.json",
      "appsettings.production.json",
      "web.config"
    ]
  },
Run Code Online (Sandbox Code Playgroud)

我有3个相应的启动类,它们使用适当appsettings的环境

var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true);
Run Code Online (Sandbox Code Playgroud)

但是,当我发布应用程序时,所有3个appsettings文件都会在所有环境中结束.如何发布特定于环境的appsetting文件?

.net-core coreclr asp.net-core asp.net-core-1.0

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

如何在发布文件中设置aspnetcore_environment?

我有ASP.NET核心应用程序(Web Api).该文档解释了如何使用多个环境,但是它无法解释aspnetcore_environment在发布网站时如何设置.

因此,可以说,如果我有3个环境Development,StagingProduction

  1. 在经典的ASP.NET Web应用程序中,我用来创建3个构建配置.Development,StagingProduction(如下图所示).然后是3个.pubxml文件,每个配置一个.我是否也需要使用相同的方法进行ASP.NET Core应用?

  2. 如何设置aspnetcore_environment.pubxml文件?

  3. 如果问题1中指定的方法已经过时,那么替代方法是什么?(我使用Jenkins进行CI)

在此输入图像描述

更新1

我知道我必须设置ASPNETCORE_ENVIRONMENT但是我无法理解我们在哪里设置它?在开发过程中,我可以在配置文件中设置它launchSettings.json,但问题是我们如何在发布到分段或生产时设置它?我们在目标服务器上设置环境变量吗?

在此输入图像描述

更新2
我在这里找到了解释设置环境变量的不同方法的文章.这部分回答了我的问题.但是,当我发布应用程序时,发布过程不会在发布时遵循环境变量appsettings.{env.EnvironmentName}.json
我已为该问题创建了单独的帖子

configuration .net-core coreclr asp.net-core asp.net-core-1.0

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

通过命令行构建.NET Core应用程序,以便它可以在未安装.NET Core的计算机上运行

我的最终目标是创建一个跨平台(非Web)控制台应用程序,所以我现在正在探索.NET Core.

在我之前的.NET项目中,我在Visual Studio中进行了所有开发,但我还创建了一个批处理/ MSBuild文件,因此我只需单击一下即可构建整个项目(包括设置,NuGet包,带二进制文件的zip文件等).这是以前项目的一个例子.

最后,我想用我的.NET Core测试项目做类似的事情.
但是现在我在第一步失败了:我无法在Visual Studio之外构建它,因此结果可以在没有安装.NET Core的另一台Windows机器上运行.
(在第一步中,我忽略了跨平台部分 - 我很乐意让它在Windows上运行)


是)我有的

我设法让它在Visual Studio 2015 Community Edition中运行如下:

  1. 在Visual Studio中创建新项目:"新建项目"⇒"Web"⇒"控制台应用程序(包)"

  2. 在Visual Studio中创建新的发布配置文件(菜单中的"Build"⇒"Publish").
    这将创建一个PowerShell脚本(以及一个带有设置的XML文件)

这是我在GitHub上的测试项目.

当我再次在菜单中"构建"⇒"发布"时,Visual Studio显然会再次执行先前创建的PowerShell脚本.
结果略超过90 MB,由598个文件夹中的825个文件组成,如下所示:

Visual Studio发布结果

当我将它复制到另一台机器上时(安装了Win 7/.NET 4/安装的.NET Core ),它可以工作.


我试图在Visual Studio外获得相同的结果

1. dotnet发布

这个答案这个答案听起来像我可以用来dnu publish通过命令行获得相同的结果.
据我所知,.NET的核心部分仍移动的目标,现在,所以显然dnu现在dotnet不是.

所以我尝试为它执行dotnet publish(并创建一个批处理文件):

dotnet publish "%~dp0\src\CoreTestVisualStudio" -c Release -r win7-x64 -o "%~dp0\release\cli"
Run Code Online (Sandbox Code Playgroud)

结果包含一个 …

c# visual-studio .net-core coreclr dnx

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

可能是Visual Studio 2015中的C#编译器错误

我认为这是一个编译器错误.

使用VS 2015编译时,以下控制台应用程序编译并执行完美:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var x = MyStruct.Empty;
        }

        public struct MyStruct
        {
            public static readonly MyStruct Empty = new MyStruct();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在它变得很奇怪了:这个代码编译,但它会TypeLoadException在执行时抛出.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var x = MyStruct.Empty;
        }

        public struct MyStruct
        {
            public static readonly MyStruct? Empty = null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你遇到同样的问题吗?如果是这样,我将在Microsoft提出问题.

代码看起来毫无意义,但我用它来提高可读性并实现消歧.

我有不同的重载方法,如

void DoSomething(MyStruct? arg1, string arg2)

void DoSomething(string arg1, string arg2) …

c# compiler-bug roslyn visual-studio-2015 coreclr

28
推荐指数
2
解决办法
1535
查看次数

.Net Core中的C++/CLI支持

我们的项目结构如,

native.dll: - 这包含用c\c ++编写的纯本机代码.这个native.dll使用*def文件公开了一些函数.

Wrapper Library(wrapper.dll compiled with .Net framework v4.0)-为了使用的功能native.dll,一个Wrapper lib(wrapper.dll) 是写在C++\CLI使用:clr\oldsyntax.此包装具有的所有代码InteroperabilityMarshalling.

Application(Console App v4.0)直接用于wrapper.dll使用提供的功能native.dll.

现在这个项目需要在.Net Core中运行.这意味着我们将有一个 .Net Core applicationreference wrapper.dll,反过来会参考 native.dll.

我知道这不会直接起作用.但问题是.Net Core(CoreCLR)是否支持 C++\CLI(clr\oldsyntax)运行时环境

如果不是,该应用程序可能的解决方案是什么?

managed-c++ unmanaged c++-cli .net-core coreclr

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