前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET | 笔记 | 1

.NET | 笔记 | 1

作者头像
yiyun
发布2022-04-01 16:31:33
1K0
发布2022-04-01 16:31:33
举报
文章被收录于专栏:yiyun 的专栏

1. 合并dll与exe

Costura.Fody

2. xUnit 中使用 User Secrets

2.1 添加 User Secrets

参考:

代码语言:javascript
复制
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0" />

Microsoft.Extensions.Configuration.UserSecrets 此包用于 通过 .NET Core 的配置系统访问存储在 secrets.json 文件中的数据

注意: 使用 : 分隔,而不是 .,例如: SecretsKeys:AfdianUserId

补充:

  • 切换命令行窗口到Project程序的目录, 输入 dotnet user-secrets -h ,来查看可以使用的命令
  • 使用 dotnet user-secrets list 列出所有的用户机密
  • 使用 dotnet user-secrets set WeChatAppKey "X3423FEED2435DD"设置一个用户机密,其中 WebChatAppKey 为键,后面的是值。
  • 然后使用dotnet user-secrets list来查看设置的键值对。

User Secret Manager

命令

描述

语法

clear

删除程序中所有的secrets

dotnet user-secrets clear

list

列举程序中所有的secrets

dotnet user-secrets list

remove

删除指定的secret

dotnet user-secrets remove NameOfSecret

set

设置secret

dotnet user-secrets set NameOfSecret ValueOfSecret

2.2 xUnit 中使用 依赖注入

参考:

代码语言:javascript
复制
<PackageReference Include="Xunit.DependencyInjection" Version="8.3.0" />
代码语言:javascript
复制
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;


namespace Afdian.Sdk.Tests
{
    public class Startup
    {
        public void ConfigureHost(IHostBuilder hostBuilder)
        {
            hostBuilder.ConfigureHostConfiguration(configurationBuilder =>
            {
                configurationBuilder.AddUserSecrets("0377da50-fdb8-4811-bab1-7299c2657571", true);
            });
        }


        public void ConfigureServices(IServiceCollection services)
        {
            //services.AddTransient<IDependency, DependencyClass>();
        }

    }
}

注意: 0377da50-fdb8-4811-bab1-7299c2657571 需更改为你项目 ( Afdian.Sdk.Tests.csproj ) 中的 <UserSecretsId>0377da50-fdb8-4811-bab1-7299c2657571</UserSecretsId>

2.3 补充

Microsoft.Extensions.SecretManager.Tools 经过测试, 在 Visual Studio Enterprise 2022 中已经不需要此包,

不安装此包也可以使用

3. System.Drawing.Common

补充: .NET Core 图像处理 Image 依赖于 System.Drawing.Common

看上方绿线

关于 System.Drawing.Common 包 的一些问题

参考:

在 .NET 6 之前,使用 System.Drawing.Common 包不会产生任何编译时警告,也不会引发任何运行时异常。

从 .NET 6 开始,当为非 Windows 操作系统编译引用代码时,平台分析器会发出编译时警告。 此外,除非设置了配置选项,否则将引发以下运行时异常:

代码语言:javascript
复制
System.TypeInitializationException : The type initializer for 'Gdip' threw an exception.
      ---- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms. See https://aka.ms/systemdrawingnonwindows for more information.
      Stack Trace:
           at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): at System.Drawing.Bitmap..ctor(String filename, Boolean useIcm)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): at System.Drawing.Bitmap..ctor(String filename)
        /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): at System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+MoveNext()
        /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
        ----- Inner Stack Trace -----
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): at System.Drawing.LibraryResolver.EnsureRegistered()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): at System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): at System.Drawing.SafeNativeMethods.Gdip..cctor()

更改原因

由于 System.Drawing.Common 被设计为 Windows 技术的精简包装器,因此其跨平台实现欠佳。

libgdiplus 是本机端 System.Drawing.Common 跨平台实现的主要提供程序。 libgdiplus 实际上是对 System.Drawing.Common 所依赖的 Windows 部分的重新实现。 该实现使 libgdiplus 成为一个重要的组件。 它大约有 30,000 行 C 代码,大部分未经测试,而且缺少很多功能。 libgdiplus 还具有许多用于图像处理和文本呈现的外部依赖项,例如 cairopango 和其他本机库。 这些依赖项使得维护和交付组件更具挑战性。 自从包含 Mono 跨平台实现以来,我们已将许多从未得到修复的问题重定向到 libgdiplus。 相比之下,我们采用的其他外部依赖项,例如 icuopenssl,都是高质量的库。 使 libgdiplus 的功能集和质量与 .NET 堆栈的其余部分相媲美是不可行的。

通过对 NuGet 包的分析,我们观察到 System.Drawing.Common 主要用于跨平台的图像处理,例如 QR 代码生成器和文本呈现。 由于我们的跨平台图形支持不完整,我们还没有注意到大量的图形使用。 System.Drawing.Common 在非 Windows 环境中的使用通常得到 SkiaSharp 和 ImageSharp 的良好支持。

System.Drawing.Common 将仅在 Windows 窗体和 GDI+ 的上下文中继续演变。

建议的操作

若要将这些 API 用于跨平台应用,请迁移到以下库之一:

或者,可通过将 runtimeconfig.json 文件中的 System.Drawing.EnableUnixSupport 运行时配置开关设置为 true 来启用对非 Windows 平台的支持:

代码语言:javascript
复制
{
   "runtimeOptions": {
      "configProperties": {
         "System.Drawing.EnableUnixSupport": true
      }
   }
}

添加此配置开关是为了让严重依赖此包的跨平台应用有时间迁移到更新式的库。 但是,不会修复非 Windows bug。 此外,我们可能会在未来版本中完全删除对非 Windows 平台的支持,即使你使用运行时配置切换启用它也是如此。

备注 尽管运行时开关的名称为 System.Drawing.EnableUnixSupport,但它适用于各种非 Windows 平台(如 macOS 和 Android),它们通常可被视为 Unix 风格。

SixLabors.ImageSharp

参考:

4. WebRequest 等在 .NET 6 废弃

.NET 实现 自定义 AOP

参考:

dotnet build --configuration Release 生成包含引用的包的dll

注意: vs 没有提示

代码语言:javascript
复制
<PropertyGroup>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

方式2: 直接用 publish

代码语言:javascript
复制
dotnet publish --configuration Release

参考

感谢帮助!

本文作者: yiyun

本文链接: https://moeci.com/posts/分类-dotnet/dotnet-notebook-1/

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 合并dll与exe
  • 2. xUnit 中使用 User Secrets
    • 2.1 添加 User Secrets
      • 2.2 xUnit 中使用 依赖注入
        • 2.3 补充
        • 3. System.Drawing.Common
          • 更改原因
            • 建议的操作
              • SixLabors.ImageSharp
              • 4. WebRequest 等在 .NET 6 废弃
              • .NET 实现 自定义 AOP
              • dotnet build --configuration Release 生成包含引用的包的dll
                • 方式2: 直接用 publish
                • 参考
                相关产品与服务
                图像处理
                图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档