编辑 [2020 年 11 月 29 日]:.NET 5.0 现已发布,但如果您的目标是 .NET Standard 2.1,则仍然需要以下解决方案
C# 9.0 仍在开发中。有几个参考资料让我相信它现在应该是可测试的(无论如何,其中一些)。
我正在使用 VS 2019 16.7 预览版 3.1。我选择了语言版本作为项目的预览。
一些 C# 9 功能,我可以使用。喜欢:Dictionary<string, object> Stuff = new()
但是使用新init功能会给我这个错误:Error CS0518 Predefined type 'System.Runtime.CompilerServices.IsExternalInit' is not defined or imported
我该如何解决?
导致错误的代码示例:
class Test
{
public int Hello { get; init; }
}
Run Code Online (Sandbox Code Playgroud)
和
record Test(int hello);
Run Code Online (Sandbox Code Playgroud)
记录定义是速记并扩展为使用 的内容init,这就是它也受到影响的原因。
我上面链接的语言跟踪页面说该功能是Merged into …
好。这似乎是我看到答案时会面对的问题类型。
所以...
为什么要dotnet build在做之前费心dotnet publish呢?
build自动执行一个restore. 凉爽的。
它似乎publish做了build(除非你告诉它不要)。所以...如果您要在之后立即发布,为什么还要费心进行构建?为什么不直接发布,一切都在一步中发生?
为了进一步清楚...
我在一个基本场景中询问,例如:
dotnet build -c Release MyProjdotnet publish -c Release -o /somedir MyProj与只是
dotnet publish -c Release -o /somedir MyProj他们似乎在做同样的事情。
我的场景:托管在云上的网站,每个实例创建一个服务总线主题的订阅,以便自己监听消息.
我的问题: 如何以编程方式创建订阅?
...
问题:我习惯使用较旧的WindowsAzure库.现在我使用的是不支持旧库的.NET Standard
解决方案:使用Microsoft.Azure.ServiceBus NuGet包
...
问题:它不支持管理功能(如创建订阅)
解决方案:还使用NuGet库Microsoft.Azure.Management.ServiceBus
...
问题:它不支持使用连接字符串或Azure门户提供给您的密钥
解决方案:https: //github.com/Azure-Samples/service-bus-dotnet-management提供了常用的编程模式.
...
问题:WTF是它正在谈论的{tenantId}?
解决方案:很明显,它位于"Azure Active Directory" - >"Properties"下,并且有助于标记为"Directory ID"而不是tenantId,正如人们所期望的那样
...
问题:WTF是{clientId}和{clientSecret}?
解决方案:更容易.从这些信息中可以明显看出,您必须:
...
好的,示例工作的第1步也是如此?AcquireTokenAsync返回一个访问令牌!YAYYYYYYYYYYYYY
result.AccessToken是步骤2中提到的"令牌",似乎.
第2,3步......没问题......继续执行第4步.除了使用sbClient.Subscriptions.CreateOrUpdate代替
{resourceGroupName}似乎很容易 - 从门户网站上的"资源组"复制
...
问题:什么是{namespaceName}?
是服务总线名称吗?喜欢{name} .servicebus.windows.net?或者命名空间是{name.servicebus.windows.net}的全部内容?或者它包括像{sb://name.servicebus.windows.net}这样的方案?
...
问题:无论我在这里尝试什么,我都会在CreateOrUpdate调用中以"Operation返回无效状态代码'NotFound'"结束.
那就是我被困住的地方.我哪里出错了?
在旁注中,snark反映了我的挫败感 - 我觉得好像我需要学习一大堆Azure技术,我真的不想知道任何事情只是为了做一些"应该简单的事情" ".就像我被一个兔子洞弄下来一样.
[编辑#1] - "SubscriptionId"原来是在门户的计费部分下找到的AZURE订阅ID,而不是指服务总线订阅.
[编辑#2] - "namespaceName"不包括.servicebus.windows.net - 只是名称本身
随着这些变化,经过无数个小时的研究,IT工作
我创建了一个 C# 源生成器,并想将其发布到 Nuget。
但我遇到了警告/错误,例如:
Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below: - Add lib or ref assemblies for the netstandard2.0 target frameworkAn instance of analyzer Cosmogenesis.Generator.CosmosGenerator cannot be created from [..]\Cosmogenesis.Generator.dll : Could not load file or assembly 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified..(或 …这是我的情况。
应用:
ILogger<T> logger;logger.LogInformation(new EventId(123456, "HelloEvent"), "Hello there");基础设施:
我:
所以...
BIG问题:Microsoft Azure提供了哪些日志收集/处理的全部内容,它们如何组合在一起?
应用程序见解...看起来很酷。我将.UseApplicationInsights()构建器添加.AddApplicationInsightsTelemetry(..)到“启动”中。
而且我得到了漂亮的日志……关于服务结构事件,诸如http调用之类的依赖关系。但是我找不到“ Hello there” HelloEvent。
我在哪里得到的?
...
接下来,我使用Azure调查了日志,监视等。
我发现“日志分析”看起来很酷。显然,Application Insights使用它。但是我已经有了Application Insights。这是否意味着我有Log Analytics?还是我创建自己的Log Analytics工作区。如果是这样,我的日志会转到两个地方吗?是否以某种方式将Application Insights连接到它?
ARM模板实际上是从2015年开始的,名为OperationalInsights。尽管示例中有2017版,但参考文档中没有。
那么操作见解?显然,这来自某些Microsoft Operations Management Suite / OMS。之前是哪个彩信...?
最近的文档都谈论“ Azure Monitor”。但这甚至不是我可以在Azure中部署的东西。这只是一个概念吗?
…
我要做的就是在某个地方收集日志,然后用一些很酷的东西进行搜索和可视化:)
...而且我仍然找不到我的“ HelloEvent”
谁能阐明我简单的“ HelloEvent在哪里”,或者说出更大的问题“哪些是零件,它们如何组合在一起?”?
如何授予服务主体访问权限以将角色分配给它创建的资源?
这是场景。
一世...
Contributor整个订阅的访问权限)。AzureCLI@1使用服务连接创建了一个管道任务az group create …-成功- 制作资源组!az group deployment create …-成功- 部署了一些东西!
az role assignment create …-失败ERROR: Insufficient privileges to complete the operation.
我尝试制作服务主体Owner而不是Contributor. 没有不同。
这让我明白(有点)原因:Azure 服务主体权限不足,无法管理其他服务主体
这让我在这里:https : //docs.microsoft.com/en-ca/azure/devops/pipelines/release/azure-rm-endpoint?view=azure-devops#failed-to-assign-contributor-role
但我有点卡住了。我想我应该在活动目录中授予我的服务主体某种角色,以便它可以管理角色分配。
我发现了这个:https : //docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/roles-delegate-by-task#roles-and-administrators
基于此,我似乎应该授予我的服务主体Privileged role administrator访问权限。 可怕。
然后我发现了这个:https : //docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles …
我正在摆弄管道以尝试减少整体运行时间。我想做的一件事是docker pull ...在开始时执行,以便稍后在我真正需要它时为我准备好。我想将它作为后台工作解雇,并让它在该任务结束后继续存在。
我试过了: docker pull imgname &
它确实有效,但管道抱怨此消息:
STDIO 流未在进程“/bin/bash”退出事件的 10 秒内关闭。这可能表明子进程继承了 STDIO 流并且尚未退出。
我也尝试过类似的东西:
docker pull imgname </dev/null &>/dev/null & disowndocker pull imgname 0>&- 1>&- 2>&- 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- &还有一些类似的技巧。没有任何帮助。
这没什么大不了的,但是知道如何使这成为可能会很方便!
在 C# 8 中,引入了 switch 表达式。如果 switch 表达式不是详尽的,会发生什么?换句话说,如果我不测试每个可能的值会发生什么?
static void Main(string[] args)
{
int x = 1;
int imExhaustive = x switch
{
3 => 4,
_ => 0 // x = 1 matches this
};
int okFine = x switch
{
1 => 4 // x = 1 matches this
};
int noMatch = x switch
{
3 => 4 // No match
};
}
Run Code Online (Sandbox Code Playgroud) order by random_bytes(8)没有影响。为什么?
使用 MySQL(在 AWS 无服务器 v2 上)
考虑这个测试过程:
create procedure Test()
begin
create temporary table Meow (Id bigint);
insert into Meow (Id) values (1);
insert into Meow (Id) values (2);
insert into Meow (Id) values (3);
insert into Meow (Id) values (4);
insert into Meow (Id) values (5);
select * from Meow order by random_bytes(8);
drop temporary table Meow;
end
Run Code Online (Sandbox Code Playgroud)
执行它总是会产生:1,2,3,4,5
所以我尝试了其他选择语句...首先,将其提取到子查询中:
select * from
(
select *, random_bytes(8) rnd from Meow
) a order by rnd; …Run Code Online (Sandbox Code Playgroud) 创建/更新文档与 Cosmos DB 更改源处理器拾取文档之间的“正常”延迟是多少?
我们所做的一些操作是两阶段的:创建,然后几毫秒后更新。
我知道只有最新版本的文档才会出现在更改源中。但如果更改源速度超级快,我最终将处理文档的两个版本。双 RU 使用量比必要的多,因为我只关心“最终”版本。
当然,我会设计我的处理器,让它不关心。当然,我怀疑是否有任何一成不变的保证。但我仍然很好奇,想知道以前是否有人有过任何经验(并关注过这个特定的细节)。几周后,我也许也可以发表我自己的经历。
编辑:四处挖掘,我发现了 FeedPollDelay。默认情况下看起来是 5 秒。所以我想答案是“延迟/延迟是我想要的”。这在 RU 使用方面很方便,但有点令人失望,因为它是一个轮询架构。不过有道理:)