下面是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) 我有以下 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) 在开始之前,我必须声明我对这个 nuget 包还很陌生,所以先来了解一下我的基础知识。
我的应用程序有一个核心项目来携带一些 .dll 和 .sql 文件以及一个 api 项目。我已经将核心项目制作为带有dotnet pack 的nuget 包,并在 github 操作上将其自动化,因此它在所有prs上创建了一个新版本并将其推送到我的私人 nuget 服务器,直到这里一切都很好。
当我将这个核心包安装到我的api项目中时,也没有问题。它安装成功,我的 sql 文件按照我的预期显示在目标项目上(但作为链接源)。
但是当我尝试使用 dotnet pack 发布此项目时,.sql 文件不会复制到输出文件夹。我查看了文件的属性,发现它们的复制到输出目录属性已重置为不复制,并且文件路径是绝对的。
我的目标是使用 github 操作构建和部署此 api,因此绝对路径是不可接受的,此外我不想在目标项目中手动安排某些内容。
我正在用 dotnet pack 打包核心项目,但我没有
或其他类似的东西,我不知道如何使用它们。
我尝试添加到 csproj 文件<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>和<RestoreProjectStyle>PackageReference</RestoreProjectStyle>其他内容,但它们不起作用。
谁能帮我?
{
"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#/.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 倍的内存。考虑到字节数组可能非常大,这似乎不太令人满意。数据已经在内存中的连续块中,所以......
内存流可以以某种方式就地映射到字节数组吗?
我正在尝试向我的 Web API 发出简单的发布请求,但收到 CORS 错误:
\n\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
请求如下:
\nexport 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}\nRun Code Online (Sandbox Code Playgroud)\n传入该函数的url和对象如下:
\nvar url = \'https://localhost:5001/expression/add\';\n\nvar toSave = {\n \'userId\': 1,\n \'expression\': \'hello\'\n};\nRun 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) 我目前有:
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' 这是否意味着不可能在这里这样做,或者我做错了?
我正在尝试注册一个单例类,在 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) 我有 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)
主线程不等待
我感觉这是一个错误,是吗?
decimal s = 30 / 9;
double w = 20 / 9;
Console.WriteLine(s);
Console.WriteLine(w);
Run Code Online (Sandbox Code Playgroud)
结果是
.net-core ×10
c# ×8
.net ×3
asp.net-core ×1
binary-data ×1
cors ×1
csproj ×1
docker ×1
dockerfile ×1
exception ×1
http ×1
jenkins ×1
json ×1
nuget ×1