小编Kri*_*lén的帖子

使用C#反序列化Avro文件

我找不到用C#反序列化Apache Avro文件的方法.Avro文件是Microsoft Azure Event Hub中的存档功能生成的文件.

使用Java,我可以使用Apache的Avro Tools将文件转换为JSON:

java -jar avro-tools-1.8.1.jar tojson --pretty inputfile > output.json
Run Code Online (Sandbox Code Playgroud)

使用NuGet包Microsoft.Hadoop.Avro我能提取SequenceNumber,OffsetEnqueuedTimeUtc,但因为我不知道该用什么类型Body的异常被抛出.我试过Dictionary<string, object>和其他类型.

static void Main(string[] args)
{
    var fileName = "...";

    using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        using (var reader = AvroContainer.CreateReader<EventData>(stream))
        {
            using (var streamReader = new SequentialReader<EventData>(reader))
            {
                var record = streamReader.Objects.FirstOrDefault();
            }
        }
    }
}

[DataContract(Namespace = "Microsoft.ServiceBus.Messaging")]
public class EventData
{ …
Run Code Online (Sandbox Code Playgroud)

c# hadoop azure avro

13
推荐指数
3
解决办法
1万
查看次数

使用WebApplicationFactory,在Program.cs执行之前添加配置源

我正在使用新的最小 .NET 6 托管模型,并且进行了集成测试。

显然Program.cs需要配置值,所以我想使用自定义appsettings.Test.json文件。文档说我可以使用ConfigureAppConfiguration,但它的委托在之后运行Program,因此Program没有配置。以下是添加到Minimal API Playground 示例代码中的代码:

internal class PlaygroundApplication : WebApplicationFactory<Program>
{
    private readonly string _environment;

    public PlaygroundApplication(string environment = "Development")
    {
        _environment = environment;
    }

    protected override IHost CreateHost(IHostBuilder builder)
    {
        builder.UseEnvironment(_environment);

        builder.ConfigureAppConfiguration(config =>
        {
            config.AddJsonFile(appSettings); // runs AFTER Program.cs
        });

        // Add mock/test services to the builder here
        builder.ConfigureServices(services =>
        {
        });

        return base.CreateHost(builder);
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何向 提供配置Program.cs

var builder = WebApplication.CreateBuilder(args); …
Run Code Online (Sandbox Code Playgroud)

.net integration-testing

13
推荐指数
1
解决办法
1万
查看次数

C64上的稳定栅格

在Commodore 64上使用6510程序集,我试图创建一个稳定的光栅效果.使用双IRQ原理我在屏幕上绘制一些光栅线.我用NOP填充以匹配每个正常扫描线的63个循环,并且每个标记线匹配23个循环.我意识到我需要设置一个特定的起始线,以便将我的第8次迭代与坏线相匹配,但无论我放在第一行的哪一行或我使用的NOP的组合,我都无法得到时机正确.我想要完整的线条,而不是"破碎".谁能看到我做错了什么?代码采用Kick Assembler格式.这是一个截图:

截图

.pc = $0801 "Basic upstart"
:BasicUpstart($8000)

.pc = $8000 "Program"

  jsr $ff81

  sei
  lda #$35
  sta $01

  jsr setupInterrupts
  cli

  jmp *

setupInterrupts:
  lda #<int1
  ldy #>int1
  sta $fffe
  sty $ffff

  lda #$01
  sta $d01a
  lda #$7f
  sta $dc0d
  sta $dd0d
  lda $dc0d  
  lda $dd0d
  lda #$1b
  sta $d011
  lda #$01
  sta $d019

  lda start
  sta $d012

  rts

start:
  .byte 56

int1:
  pha txa pha tya pha

  :STABILIZE()

.for (var i=0; i<7; i++) {
  inc $d020   // …
Run Code Online (Sandbox Code Playgroud)

assembly 6510

12
推荐指数
1
解决办法
3502
查看次数

使用System.Net.Mail.MailMessage发送的电子邮件中的编码不正确

收到与System.Net.Mail.MailMessage某些收件人一起发送的电子邮件似乎与电子邮件有编码问题.例如charachter ä显示为å¤.我已设置编码属性:

System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
...
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
Run Code Online (Sandbox Code Playgroud)

我还可以做些什么?

更新:

如果我使用该Body属性电子邮件正确显示,但当我使用该AlternateViews属性时,电子邮件显示不正确.

完整代码:

SmtpClient smtpClient = new SmtpClient("some.host.com");
MailMessage msg = new MailMessage();
msg.To.Add("someone@host.com");
msg.From = new MailAddress("name@host.com", "Name Name");
msg.Subject = "Test";

//Displays as ä
//msg.Body = "ä";

// Displays as ä
AlternateView htmlView = AlternateView.CreateAlternateViewFromString("ä", new ContentType(MediaTypeNames.Text.Html));
msg.AlternateViews.Add(htmlView);

smtpClient.Send(msg);
Run Code Online (Sandbox Code Playgroud)

发送到Gmail时,电子邮件会正确显示,但在发送到Exchange服务器时,电子邮件显示不正确.我已经在.NET 3.5和4.5中进行了测试.

c# asp.net email

9
推荐指数
1
解决办法
5528
查看次数

Azure Function App VS 2019 .NET 3.0 中的错误 - 找不到方法:'IFunctionsHostBuilder.get_Services()'

Azure Functions/EFSQLSERVER .NET CORE 3.0 的问题:

重现:

  • 使用 Visual Studio 2019 16.2.1
  • 使用 Azure Function 模板创建项目。
  • 将目标框架更改为 .NET Core 3.0
  • 通过 Nuget 包管理器添加 Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" 引用。
  • 使用 F5 执行函数应用程序

导致错误,如以下代码段所示。有人遇到过这个问题吗?

Azure Functions Core Tools (2.7.1633 Commit hash: 45c7d86a3bbc9ed0a80a8f4199aa7ea80ccfb24e)
Function Runtime Version: 2.0.12673.0
[10/4/2019 6:13:14 PM] Building host: startup suppressed:False, configuration suppressed: False
[10/4/2019 6:13:14 PM] Loading startup extension 'Startup'
[10/4/2019 6:13:14 PM] Loaded extension 'Startup' (1.0.0.0)
[10/4/2019 6:13:14 PM] Loading startup extension 'DurableTask'
[10/4/2019 6:13:14 PM] Loaded extension 'DurableTask' (1.0.0.0) …
Run Code Online (Sandbox Code Playgroud)

azure azure-functions-runtime .net-core-3.0 entity-framework-core-3.0

9
推荐指数
1
解决办法
6032
查看次数

难以点击 SwiftUI 导航栏项目中的按钮

我有一个NavigationView带有Button导航栏项的 SwiftUI 。似乎只有当用户点击那个小Image. 我可以在不影响导航栏高度的情况下将可点击区域放大吗?

我尝试添加.frameImage,但这使导航栏太大。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("Foo")
                .navigationBarTitle(Text("Title"), displayMode: .inline)
                .navigationBarItems(leading:
                    HStack {
                        Button(action: {
                            print("tapped")
                        }) {
                            Image(systemName: "info.circle")
                        }
                    })
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

9
推荐指数
1
解决办法
2932
查看次数

无法进入私有存储库中托管的启用 SourceLink 的 NuGet

我正在使用 Visual Studio 15.8.4 从私有 MyGet 源引用 NuGet 包。源代码由 GitHub 上的私人存储库托管。

我可以成功打印文件中的映射文档:

sourcelink print-json C:\Users\Foo\.nuget\packages\My.Package\1.1.0-beta-0040\lib\netstandard2.0\My.Package.dll
{"documents":{"C:\\projects\\my-package\\*":"https://raw.githubusercontent.com/username/My.Package/aba3ab5d12f1271943b8db0d79e1ee25ad4735c2f/*"}}
Run Code Online (Sandbox Code Playgroud)

我在 Visual Studio 中取消选中Enable Just My Code,并且我已选中Enable Source Link supportFall back to Git Credential Manager authentication for all Source Link requests.

但是当我调试时,调试器不会进入包。我希望显示有关“源链接将从互联网下载”的对话框,但什么也没有发生。调试器只是单步执行代码行。

由于文档路径是正确的,除了tokenURI 中缺少的键之外,我得出的结论是 NuGet 包本身已正确打包,因此我没有提供有关该过程的任何详细信息。

这些文件不可下载,但这是由于未进行身份验证,不是吗?

sourcelink test C:\Users\Foo\.nuget\packages\My.Package\1.1.0-beta-0040\lib\netstandard2.0\My.Package.dll
{"documents":{"C:\\projects\\my-package\\*":"https://raw.githubusercontent.com/username/My.Package/aba3ab5d12f1271943b8db0d79e1ee25ad4735c2f/*"}}

2 Documents with errors:
111111111117629326ff4b1b85b15fad279137fe sha1 csharp C:\projects\my-package\src\My.Package\Extensions.cs
https://raw.githubusercontent.com/username/My.Package/11111111111095e33b8db0d79e1ee25ad4735c2f/src/My.Package/Extensions.cs
error: url failed NotFound: Not Found
1111111111184ac4af0122bdae9216bd24036e8f sha1 csharp C:\projects\my-package\src\My.Package\MyProgram.cs
https://raw.githubusercontent.com/username/My.Package/11111111111095e33b8db0d79e1ee25ad4735c2f/src/My.Package/MyProgram.cs
error: url failed NotFound: Not …
Run Code Online (Sandbox Code Playgroud)

.net nuget myget sourcelink

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

Azure DevOps 代码覆盖率,其中包含 PR 的 .coverage 和完整报告的 Cobertura

我有一个用于验证拉取请求的Azure DevOps 管道。我已配置 dotnet test为使用--collect "Code coverage"参数收集代码覆盖率指标:

- task: DotNetCoreCLI@2
  displayName: dotnet test
  inputs:
    command: 'test'
    arguments: '--configuration $(BuildConfiguration) --collect "Code coverage" /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura'
    workingDirectory: $(baseWorkingDirectory)
    projects: 'tests/**/*.csproj'
    nobuild: true
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我也通过了/p:CollectCoverage=true /p:CoverletOutputFormat=cobertura。为了生成覆盖率报告,我必须这样做:

- task: CmdLine@2
  inputs: 
    script: dotnet tool install -g dotnet-reportgenerator-globaltool

- task: CmdLine@2
  inputs: 
    script: reportgenerator -reports:$(Build.SourcesDirectory)/tests/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/CodeCoverage -reporttypes:HtmlInline_AzurePipelines;Cobertura

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Build.SourcesDirectory)/CodeCoverage/Cobertura.xml'
    reportDirectory: '$(Build.SourcesDirectory)/CodeCoverage'
Run Code Online (Sandbox Code Playgroud)

文档指出拉取请求的代码覆盖率仅可使用 Visual Studio 代码覆盖率结果格式(文件扩展名 .coverage)

所以:

  • 我必须使用Visual Studio …

code-coverage azure-devops

5
推荐指数
1
解决办法
3688
查看次数

使用 System.Text.Json 将科学记数法反序列化为 long

我有带有科学记数法数字的 JSON,例如1.83E+2。使用 Json.NET 将其反序列化为 along对我来说效果很好,但是当我用 System.Text.Json 中的新反序列化器替换反序列化器时,它会抛出一个JsonException

System.Text.Json.JsonException:“无法将 JSON 值转换为 System.Int64。...'

这是一个可重现的示例:

static void Main()
{
    // test1 is 183
    var test1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Foo>(@"{""Bar"": 1.83E+2}"); 

    // throws JsonException
    var test2 = System.Text.Json.JsonSerializer.Deserialize<Foo>(@"{""Bar"": 1.83E+2}");
}

public class Foo
{
    public long Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

json .net-core system.text.json

3
推荐指数
1
解决办法
1181
查看次数

以空格为千位分隔符的格式数字

第一:是的,我知道不应在数据层中进行数字格式化,但我正在使用一个无法修改的应用程序,也无法在应用程序中格式化结果集。我只能写一个查询。

对于 SQL Server 2008 查询,我想使用空格作为千​​位分隔符并四舍五入到两位小数。示例:123363.249999应显示为123 363,25.

我试过了:

SELECT REPLACE(CONVERT(varchar, CONVERT(money, 123363.249999), 1), '.00', '')
Run Code Online (Sandbox Code Playgroud)

但这导致123,363.25. 我正在寻找比用空格替换逗号和用逗号替换点更好的解决方案。在查询中设置语言环境会很好。

sql sql-server

2
推荐指数
1
解决办法
2万
查看次数

Azure DevOps CI Pipeline - 如何动态签出分支?

设置:
我有一个数据库存储库和一个用于测试数据库存储库的单元测试存储库,这两个存储库共享 Azure DevOps 中的一个项目。我有一个 CI 管道,驻留在数据库项目中,在推送到远程跟踪分支时触发。当该目录中的任何分支被推送到时,触发器将运行 CI。

问题:
我还需要检查单元测试项目,以便我可以调用它。在创建任务等之前,我们不会知道主题分支的名称,如何动态捕获?

因此,工程师可以在 CI 支持的情况下在多个分支上工作,而不必担心在紧急情况下进行整理。

我读过这篇文章;https://learn.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#repository-details

我试过:

trigger:
- dev/a/*

steps:

- checkout: git://proj/repo-a@dev/a/*
- checkout: git://proj/repo-b@dev/a/*
Run Code Online (Sandbox Code Playgroud)

只是想看看是否有可能同时进行项目。

它会引发错误:

管道无效。无法使用 ref refs/heads/dev/a/ 获取 Azure Repos 上托管的存储库 repo-a 的最新源版本。无法使用 ref refs/heads/dev/a/ 获取 Azure Repos 上托管的存储库 repo-b 的最新源版本

我也尝试了上面没有通配符的方法,没有乐趣。另一点是我不想签出所有分支,而只想签出带有推送的分支。

当然这是可能的......

continuous-integration automation azure-devops azure-pipelines

2
推荐指数
1
解决办法
4733
查看次数