我目前正在评估Roslyn Scripting,并按照此Scripting API Samples Wiki页面上的描述进行操作:https: //github.com/dotnet/roslyn/wiki/Scripting-API-Samples
首先,我使用VS2017并创建一个针对.NET FW 4.6.1的简单WinForms项目,并通过添加nuget包来安装Scripting API,如下所示:
Install-Package Microsoft.CodeAnalysis.CSharp.Scripting
Run Code Online (Sandbox Code Playgroud)
这很好,上面的样本也可以很好地工作.然而,让我感到惊讶的是,通过安装该nuget包,检测到它依赖的47个其他包的列表并将其添加到我的项目的packages.config文件中.所有这些都被添加到packages文件夹中,现在总共有279 MB!其中包是动物,如"System.Console.4.3.0"或"System.Linq.4.3.0",我想这是我.NET Framework安装中已包含的相同或类似命名组件的替代品.
所以这是我的两个问题:
谢谢!
有人可以解释提供...抽象包背后的一般想法吗?
例如,当我在 VS NuGet 包管理器中搜索“托管”一词时,结果列表中有:
这些都有关系吗?有些似乎依赖于平台(AspNetCore),而有些则不是?是否有一般规则告诉我何时选择哪个?
假设我想在 .NET5 类库中实现 BackgroundService,我应该安装这些 NuGet 中的哪一个?(似乎Microsoft.Extensions.Hosting.Abstractions对我来说很好用,但我不得不尝试一下。)
谢谢
我想同时实现
在同一进程中使用 .NET 6 并使用 Kestrel 自托管运行它,即没有 IIS。
我认为关键是在相应的 Program.cs 模板中找到的服务和中间件管道配置。以下是 VS 2022 (17.1.5) 为我创建的两个模板:
using BlazorApp1.Data;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see …Run Code Online (Sandbox Code Playgroud) 假设我有一个长时间运行的任务,我已经初始化并从我的页面类的 OnInitializedAsync() 方法开始,该方法派生自 Microsoft.AspNetCore.Components.ComponentBase。我用它来收集数据,它不时更新用户界面,效果很好。
但在某些时候,我需要摆脱那个后台任务。当客户端切换到另一个页面或离开网络应用程序时,我想取消我的任务,这样它就不会一直运行下去。我没有找到合适的生命周期方法。
有什么建议?
假设我有这个 const 枚举定义:
const enum Snack {
Apple = 0,
Banana = 1,
Orange = 2,
Other = 3
}
Run Code Online (Sandbox Code Playgroud)
在我的打字稿代码中,可以获取其中一个成员的字符串文字吗?
在 C# 中,它将是例如nameof(Snack.Orange). (我知道 typescript 不支持 nameof 并且我知道非常量枚举是如何可能的。)