小编Jos*_*osh的帖子

在 VS2019 中测试 C# 9.0 - CS0518 IsExternalInit 未定义或导入......我如何定义/导入它?

编辑 [2020 年 11 月 29 日]:.NET 5.0 现已发布,但如果您的目标是 .NET Standard 2.1,则仍然需要以下解决方案


C# 9.0 仍在开发中。有几个参考资料让我相信它现在应该是可测试的(无论如何,其中一些)。

  1. 由 Awesome 先生本人撰写的 Microsoft 博客,介绍了这些功能。https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/
  2. github上的语言跟踪页面:https : //github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md

我正在使用 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 …

c# c#-9.0

50
推荐指数
3
解决办法
7813
查看次数

为什么要在 dotnet 发布之前打扰 dotnet 构建?

好。这似乎是我看到答案时会面对的问题类型。

所以...

为什么要dotnet build在做之前费心dotnet publish呢?

build自动执行一个restore. 凉爽的。

它似乎publish做了build(除非你告诉它不要)。所以...如果您要在之后立即发布,为什么还要费心进行构建?为什么不直接发布,一切都在一步中发生?

为了进一步清楚...

我在一个基本场景中询问,例如:

  • dotnet build -c Release MyProj
  • dotnet publish -c Release -o /somedir MyProj

与只是

  • dotnet publish -c Release -o /somedir MyProj

他们似乎在做同样的事情。

build .net-core

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

使用.net标准以编程方式创建服务总线订阅

我的场景:托管在云上的网站,每个实例创建一个服务总线主题的订阅,以便自己监听消息.

我的问题: 如何以编程方式创建订阅?

...

问题:我习惯使用较旧的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. 转到"Azure Active Directory"
  2. 点击"应用注册"
  3. 点击"创建新的应用注册"
  4. 将其命名为"Web app/API",并在URL上标记您想要的任何内容,因为它实际上并不重要,即使它是强制性的
  5. 记录"应用程序ID",每个人都知道它实际上是{clientId}引用的内容
  6. 在新应用程序中单击"设置"
  7. 点击"密钥"
  8. 在"密码"部分下键入一些随机说明,然后点击"保存"
  9. 在那里保存"价值",因为它秘密地是{clientSecret}(多么聪明!它的秘密!)
  10. 返回"服务总线"
  11. 选择"访问控制(IAM)"
  12. 选择像所有者/贡献者这样的角色
  13. 输入您的应用程序名称并保存

...

好的,示例工作的第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# azureservicebus .net-standard

14
推荐指数
2
解决办法
3371
查看次数

如何发布依赖于 Nuget 的 C# 源生成器?

我创建了一个 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 framework
  • An 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..(或 …

c# nuget sourcegenerators

7
推荐指数
0
解决办法
1260
查看次数

Azure Monitor ...还是Log Analytics?还是应用程序见解?还是运营见解?要么

这是我的情况。

应用:

  1. 创建一个asp.net核心应用
  2. 抓住 ILogger<T> logger;
  3. logger.LogInformation(new EventId(123456, "HelloEvent"), "Hello there");

基础设施:

  1. 部署服务结构(通过ARM模板)
  2. 将应用程序部署到服务结构

我:

  1. 四处寻找我的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在哪里”,或者说出更大的问题“哪些是零件,它们如何组合在一起?”?

logging azure

6
推荐指数
1
解决办法
1065
查看次数

如何使用服务主体将角色分配给另一个服务主体

如何授予服务主体访问权限以将角色分配给它创建的资源?


这是场景。

一世...

  • 创建了 Azure DevOps 管道
  • 创建了一个服务连接(它创建了一个服务主体并授予它对Contributor整个订阅的访问权限)。
  • AzureCLI@1使用服务连接创建了一个管道任务
  • 执行az group create …-成功- 制作资源组!
  • 执行az group deployment create …-成功- 部署了一些东西!
    • ^--(除非我将任何角色分配作为 ARM 模板的一部分)
  • 执行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 …

azure-active-directory azure-devops azure-pipelines

6
推荐指数
1
解决办法
2190
查看次数

在 Azure Pipelines 中,如何在其他任务运行时执行后台任务?

我正在摆弄管道以尝试减少整体运行时间。我想做的一件事是docker pull ...在开始时执行,以便稍后在我真正需要它时为我准备好。我想将它作为后台工作解雇,并让它在该任务结束后继续存在。

我试过了: docker pull imgname &

它确实有效,但管道抱怨此消息:

STDIO 流未在进程“/bin/bash”退出事件的 10 秒内关闭。这可能表明子进程继承了 STDIO 流并且尚未退出。

我也尝试过类似的东西:

  • docker pull imgname </dev/null &>/dev/null & disown
  • docker pull imgname 0>&- 1>&- 2>&- 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- &

还有一些类似的技巧。没有任何帮助。

这没什么大不了的,但是知道如何使这成为可能会很方便!

azure-pipelines

6
推荐指数
1
解决办法
2844
查看次数

如果我的 C# switch 表达式不是详尽的,会发生什么?

在 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)

c# c#-8.0 switch-expression

5
推荐指数
2
解决办法
2140
查看次数

为什么MySQL order by random_bytes没有效果?

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)

mysql

5
推荐指数
0
解决办法
106
查看次数

Cosmos DB 更改源 - 延迟/延迟是多少?

创建/更新文档与 Cosmos DB 更改源处理器拾取文档之间的“正常”延迟是多少?

我们所做的一些操作是两阶段的:创建,然后几毫秒后更新。

我知道只有最新版本的文档才会出现在更改源中。但如果更改源速度超级快,我最终将处理文档的两个版本。双 RU 使用量比必要的多,因为我只关心“最终”版本。

当然,我会设计我的处理器,让它不关心。当然,我怀疑是否有任何一成不变的保证。但我仍然很好奇,想知道以前是否有人有过任何经验(并关注过这个特定的细节)。几周后,我也许也可以发表我自己的经历。

编辑:四处挖掘,我发现了 FeedPollDelay。默认情况下看起来是 5 秒。所以我想答案是“延迟/延迟是我想要的”。这在 RU 使用方面很方便,但有点令人失望,因为它是一个轮询架构。不过有道理:)

azure-cosmosdb

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