小编sup*_*tor的帖子

使用 System.Text.Json 反序列化匿名类型

我正在为 .NET Core 3.x 更新一些应用程序,作为其中的一部分,我正在尝试Json.NET从新System.Text.Json类迁移。使用 Json.NET,我可以反序列化一个匿名类型,如下所示:

var token = JsonConvert.DeserializeAnonymousType(jsonStr, new { token = "" }).token;
Run Code Online (Sandbox Code Playgroud)

新命名空间中是否有等效的方法?

c# json .net-core .net-core-3.1 system.text.json

17
推荐指数
1
解决办法
5365
查看次数

抑制Microsoft Fakes警告

我正在使用Microsoft Fakes来填充几个WindowsAzure组件进行测试.按照vs 2012中的建议: Shims 编译,我更新了我的.fakes文件,只生成我实际需要的垫片:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="false">
  <Assembly Name="Microsoft.WindowsAzure.Storage" Version="2.1.0.0"/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="Microsoft.WindowsAzure.Storage.CloudStorageAccount"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Queue.CloudQueueClient"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Queue.CloudQueue"/>
  </ShimGeneration>
</Fakes>
Run Code Online (Sandbox Code Playgroud)

但我仍然得到"一些假货无法生成......"的警告.正在生成所有指定的填充程序,并且对上述任何行进行注释会导致我的测试项目无法构建.如果我打开诊断程序,我会看到许多消息,例如:

Warning 2   Cannot generate shim for Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient+<>c__DisplayClass1: type is not supported because of internal limitations.
Run Code Online (Sandbox Code Playgroud)

一切正常,我只想抑制警告,以免混淆我们的CI服务器.是否有非诊断消息的警告编号,我可以直接在测试项目中忽略?

microsoft-fakes visual-studio-2013

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

在 Linux 上获取 .NET Core DLL 版本

我有一个 .NET Core 应用程序,它在构建期间使用 .csproj 中的标准选项设置元数据属性:

<Project>

  <PropertyGroup>

    <Product>MyCoolProduct</Product> 
    <Version>0.1.1</Version>

  </PropertyGroup>

  <snip />

</Project>
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,这很容易在资源管理器中或通过 PowerShell 脚本从编译的 .dll 中检索。我如何在 Linux 上做类似的事情?理想情况下,我希望能够运行一个简单的命令,例如dotnet inspect my.dll获取该程序集的元数据摘要,但接下来最好的事情是什么?

linux .net-core

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

微软伪造通用方法的垫片

我没有弄清楚如何为特定的泛型方法设置垫片.这是实际方法的签名:

public IEnumerable<TElement> ExecuteQuery<TElement>(TableQuery<TElement> query, TableRequestOptions requestOptions = null, OperationContext operationContext = null) where TElement : ITableEntity, new();
Run Code Online (Sandbox Code Playgroud)

这就是我目前正在尝试(和失败)配置垫片的方式:

ShimCloudTable shimTable = new ShimCloudTable();
shimTable.ExecuteQueryOf1TableQueryOfM0TableRequestOptionsOperationContext<MyEntity> = (query, options, context) => {
    return new List<MyEntity>();
};
Run Code Online (Sandbox Code Playgroud)

编译器只给我一些"无效的表达式术语"错误,所以显然我在这里缺少一些非常基本的东西.

编辑:这是MS Fakes生成的垫片签名:

public void ExecuteQueryOf1TableQueryOfM0TableRequestOptionsOperationContext<TElement>(FakesDelegates.Func<TableQuery<TElement>, TableRequestOptions, Microsoft.WindowsAzure.Storage.OperationContext, System.Collections.Generic.IEnumerable<TElement>> shim) where TElement : ITableEntity, new();
Run Code Online (Sandbox Code Playgroud)

c# generics microsoft-fakes

11
推荐指数
1
解决办法
7626
查看次数

防止ImageMagick转换为灰度

我在Windows上使用ImageMagick-6.9.1来调整PNG文件的大小,然后再使用其他工具处理它.源文件是RGBA,但图像数据是灰度(所有像素对于R,G和B具有相同的值).似乎ImageMagick正在检测这个,并将输出转换为灰度,即使我指定格式和颜色空间如下:

convert.exe src.png -format PNG32 -colorspace sRGB -background transparent -resize 830x540 out.png
Run Code Online (Sandbox Code Playgroud)

我已经验证了在几个不同的应用程序(包括Photoshop)中生成的输出格式是8位灰度.这是一个问题,因为后面的处理步骤无法处理灰度格式化和崩溃.向源添加色调可使流程成功完成,但我们需要能够处理未打印的原件.

即使检测到源是灰度,我如何强制ImageMagick输出RGB格式的图像?

更长的日志:(注意IHDR中从color_type 6到color_type 4的转换)

>.\ImageMagick-6.9.1-2\identify.exe -verbose rgba_src.png 
Image: rgba_src.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 884x747+0+0
  Resolution: 28.35x28.35
  Print size: 31.1817x26.3492
  Units: PixelsPerCentimeter
  Type: GrayscaleAlpha
  Base type: GrayscaleAlpha
  Endianess: Undefined
  Colorspace: Gray
  Depth: 8-bit
  Channel depth:
    gray: 8-bit
    alpha: 8-bit
  Channel statistics:
    Pixels: 660348
    Gray:
      min: 0 (0)
      max: 255 (1)
      mean: 234.605 (0.920019)
      standard deviation: 56.1418 (0.220164)
      kurtosis: 11.312
      skewness: -3.45486 …
Run Code Online (Sandbox Code Playgroud)

imagemagick imagemagick-convert

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

使用包含本机DLL的nuget包时发出警告

我正在构建一个ASP.NET Core Web API应用程序,它使用.NET Standard 2.0库来包装一些C/C++本机库.本机库构建在特定于平台的Win32 .dll,Linux .so和MacOS .dylib等中,并作为二进制文件包含在包装器库中.NETStandard库检测用户的平台,并使用P/Invoke调用适当的本机库和方法.然后,此包装器库将发布到内部NuGet包源,并从ASP.NET Core项目中引用.

这实际上很好并且按原样运行,但是在ASP.NET项目的构建期间,我得到了一系列与底层本机模块相关的警告:

Warning MSB3246 Resolved file has a bad image, no metadata, or is otherwise inaccessible. Could not load file or assembly 'mylibrary32.dll' or one of its dependencies. The module was expected to contain an assembly manifest.
Run Code Online (Sandbox Code Playgroud)

本机库只是包含在包装器项目和包中,如下所示:

<ItemGroup>
  <None Pack="true" PackagePath="lib/netstandard2.0/mylibrary32.dll" Update="mylibrary32.dll">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
  <None Pack="true" PackagePath="lib/netstandard2.0/mylibrary64.dll" Update="mylibrary64.dll">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>      
  ... etc ...
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我可以很容易地忽略这些警告,但我们最终希望能够将这个nuget包分发给客户,并且立即引入可怕警告的项目参考并不理想.如何构建NETStandard包装器项目/包,以便下游使用者不会尝试自己加载这些本机库并生成警告?

nuget .net-standard

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

无法删除泊坞窗图像

在设置新的构建机器(CentOS 7,Docker CE 17.12.0-ce)时,我做了一个简单的测试:

docker run -it --rm ubuntu bash
Run Code Online (Sandbox Code Playgroud)

效果很好,但现在我无法删除 Ubuntu 映像。

[build ~]$ docker image rm ubuntu
Error: No such image: ubuntu
[build ~]$ docker image rm ubuntu:latest
Error: No such image: ubuntu:latest
[build ~]$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              0458a4468cbc        24 hours ago        112MB
[build ~]$ docker rmi 0458a4468cbc
Error: No such image: 0458a4468cbc
Run Code Online (Sandbox Code Playgroud)

它没有被任何容器使用(无论如何这不是错误):

[build ~]$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[build ~]$
Run Code Online (Sandbox Code Playgroud)

我什至尝试了从轨道核弹的方法: …

docker

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