标签: .net-core

为什么 .NET Core Web 应用程序最初作为控制台应用程序启动

下面是Program.cs其中的文件Main(),主要方法是.NET Core中的入口点。为什么 .NET Core Web 应用程序有 main 方法以及为什么它最初作为控制台应用程序启动?

  public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core-webapi asp.net-core-3.1

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

在高山码头工人中找不到 dotnet

我有以下 dockerfile:

FROM jenkins/jenkins:lts-alpine

USER root

RUN apk update
RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib wget
RUN apk add libgdiplus --repository https://dl-3.alpinelinux.org/alpine/edge/testing/

USER jenkins

RUN wget https://dot.net/v1/dotnet-install.sh -O $HOME/dotnet-install.sh
RUN chmod +x $HOME/dotnet-install.sh
RUN $HOME/dotnet-install.sh -c 5.0

RUN dotnet --info

EXPOSE 2376 23676
Run Code Online (Sandbox Code Playgroud)

但是当我运行 docker-compose 时,它​​给了我:

Building jenkins
failed to get console mode for stdout: Invalid identifier.
[+] Building 64.6s (10/11)
[+] Building 64.7s (11/11) FINISHED
 => [internal] load build definition from jenkins.dockerfile               0.0s
 => …
Run Code Online (Sandbox Code Playgroud)

jenkins docker .net-core dockerfile docker-compose

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

将 Nuget 内容文件包含到在 .net Core 项目上发布的目标项目

在开始之前,我必须声明我对这个 nuget 包还很陌生,所以先来了解一下我的基础知识。

我的应用程序有一个核心项目来携带一些 .dll 和 .sql 文件以及一个 api 项目。我已经将核心项目制作为带有dotnet pack 的nuget 包,并在 github 操作上将其自动化,因此它在所有prs上创建了一个新版本并将其推送到我的私人 nuget 服务器,直到这里一切都很好。

当我将这个核心包安装到我的api项目中时,也没有问题。它安装成功,我的 sql 文件按照我的预期显示在目标项目上(但作为链接源)。

sql 文件链接源

但是当我尝试使用 dotnet pack 发布此项目时,.sql 文件不会复制到输出文件夹。我查看了文件的属性,发现它们的复制到输出目录属性已重置为不复制,并且文件路径是绝对的。

在此输入图像描述

我的目标是使用 github 操作构建和部署此 api,因此绝对路径是不可接受的,此外我不想在目标项目中手动安排某些内容。

我正在用 dotnet pack 打包核心项目,但我没有

  • .nu​​spec 文件
  • 包配置 xml
  • nuget配置
  • 包元数据

或其他类似的东西,我不知道如何使用它们。

我尝试添加到 csproj 文件<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies><RestoreProjectStyle>PackageReference</RestoreProjectStyle>其他内容,但它们不起作用。

我尝试添加到 csproj 文件 在此输入图像描述 它也不起作用。

谁能帮我?

csproj visual-studio nuget .net-core dotnet-core-pack

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

如何反序列化键名.Net中包含点(.)的Json字符串

{
     "odata.metadata": "sometext",
     "odata.nextLink": "sometext",
    "value": [{
            "odata.type": "SP.Data.RegionsListItem",
            "odata.id": "07404daa-61b5-4947-af9f-38f29822f775",
            "odata.etag": "\"3\"",
            "odata.editLink": "Web/Lists(guid'65dc896b-df87-4145-98d9-57c7ea619e66')/Items(3)",
            "FileSystemObjectType": 0,
            "Id": 3,
            "ServerRedirectedEmbedUri": null,
             }]
    
}
Run Code Online (Sandbox Code Playgroud)

这是我的 Json 字符串的示例,我无法更改其键名,有什么建议吗?提前致谢。

c# json .net-core

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

将流叠加在字节数组之上

C#/.NET 中是否有任何方法可以“叠加”或映射 a 到现有就地MemoryStream之上,以便数据不会被不必要地复制?byte[]

在尝试将 a 转换byte[]为流时,标准解决方案是使用 theMemoryStream及其Write函数,如下所示:

byte[] myArray = new byte[10]; // or, e.g. retrieve from DB
MemoryStream stream = new MemoryStream();
stream.Write(myArray, 0, myArray.Length);
Run Code Online (Sandbox Code Playgroud)

或者,这可以缩短为:

byte[] myArray = new byte[10]; // or, e.g. retrieve from DB
MemoryStream stream = new MemoryStream(myArray);
Run Code Online (Sandbox Code Playgroud)

这实际上是同一件事。

这样做的问题是必须将数组的全部内容复制到流中,从而占用 2 倍的内存。考虑到字节数组可能非常大,这似乎不太令人满意。数据已经在内存中的连续块中,所以......

内存流可以以某种方式就地映射到字节数组吗?

.net c# binary-data .net-core

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

即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求

我正在尝试向我的 Web API 发出简单的发布请求,但收到 CORS 错误:

\n
\n

跨源请求被阻止:同源策略不允许读取 https://localhost:5001/expression/add 处的远程资源。(原因:根据 CORS 预检响应中的标头 \xe2\x80\x98Access-Control-Allow-Headers\xe2\x80\x99,不允许使用标头 \xe2\x80\x98content-type\xe2\x80\x99)。

\n
\n

请求如下:

\n
export async function sendPostRequest(request, object) {\n\n    try {\n\n        const response = await fetch(request, {\n            method: \'POST\',\n            headers: {\n                \'Content-Type\': \'application/json\'\n            },\n            body: JSON.stringify(object),\n        });\n\n        const result = await response.json();\n\n        return result;\n\n    } catch (error) {\n        console.error(error);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

传入该函数的url和对象如下:

\n
var url = \'https://localhost:5001/expression/add\';\n\nvar toSave = {\n    \'userId\': 1,\n    \'expression\': \'hello\'\n};\n
Run Code Online (Sandbox Code Playgroud)\n

这是端点:

\n
[ApiController]\n[Route("[controller]")]\npublic class ExpressionController : ControllerBase\n{\n    [HttpPost]\n    [Route("add")]\n …
Run Code Online (Sandbox Code Playgroud)

c# http cors .net-core

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

三元条件运算符:'throw' 和 'throw' C# 之间没有隐式转换

我目前有:

if (isCritical)
    throw new CriticalException(a, b);
throw new FailException(a, b);
Run Code Online (Sandbox Code Playgroud)

我想使用三元条件运算符,例如:

isCritical ? throw new CriticalException(a, b) : throw new FailException(a, b);
Run Code Online (Sandbox Code Playgroud)

但我收到错误There is noimplicit conversion between 'throw' and 'throw' 这是否意味着不可能在这里这样做,或者我做错了?

c# exception .net-core asp.net-core

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

.net core AddSingleton初始化

我正在尝试注册一个单例类,在 Startup.ConfigureServices 方法中提供构造函数参数。

经过几次尝试,我仍然无法使 dbContext 注入工作

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGrpc();
        services.AddDbContext<EFContext>();

        services.AddSingleton<OPCClient>(x =>
        {
            string endpointURL = "opc.tcp://xxx.yyy.zzz.nnn:12345";
            bool autoAccept = false;
            int stopTimeout = Timeout.Infinite;
            var efContext = x.GetService<EFContext>();

            OPCClient client = new OPCClient(endpointURL, autoAccept, stopTimeout, efContext);
            client.Run();

            return client;

        });
    }


    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        // warmup
        app.ApplicationServices.GetService<OPCClient>();

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService<OPCService>();

            endpoints.MapGet("/", async context =>
            {
                await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core .net-core

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

主线程是否等待子线程完成?

我有 Windows 上的 .net core 和简单的代码。如您所见,没有Join()礼物。所以主线程不等待子线程,但是当我运行时:

C:\...\bin\Release\netcoreapp3.1>dotnet ConsoleAppTest.dll
> 4
> mission complete
> Thread complete
Run Code Online (Sandbox Code Playgroud)

C#代码:

C:\...\bin\Release\netcoreapp3.1>dotnet ConsoleAppTest.dll
> 4
> mission complete
> Thread complete
Run Code Online (Sandbox Code Playgroud)

我认为主线程应该运行而不是等待子线程。我错了吗?

当我启动时

 Task.Run(() =>
            {
                Thread.Sleep(10000);
                Console.WriteLine("Thread complete");
            });
Run Code Online (Sandbox Code Playgroud)

主线程不等待

.net c# multithreading .net-core

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

这在 .NET 6 中正常吗

我感觉这是一个错误,是吗?

decimal s = 30 / 9;
double w = 20 / 9;
Console.WriteLine(s);
Console.WriteLine(w);
Run Code Online (Sandbox Code Playgroud)

结果是

在此输入图像描述

.net c# .net-core

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