当前位置:网站首页 / .NET CORE / 正文

ay的C#8.0和net5高级编程笔记7-理解和打包.NET类型

时间:2021年04月21日 | 作者 : aaronyang | 分类 : .NET CORE | 浏览: 239次 | 评论 0

.Net Framework4.8实现的api没有.netCore3.0多


打开键盘映射,Ctrl+K,Ctrl+S

输入suggest

image.png

自己设置快捷提示代码的快捷键,我的设置了Ctrl+K Ctrl+K



NetCore和NetFramework和Xamarin都实现了NETStandard

如果需要支持.NET Framework4.8客户,应该在NetStandard2.0上创建类库


修改类库为NS2

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- <TargetFramework>net5.0</TargetFramework> -->
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

</Project>


发布用于部署的应用程序

1 与框架相关的部署(FDD)

2 与框架相关的可执行文件(FDE)

3 自包含


如果选择部署应用程序及其包依赖项而不是NC本身,那么可以依赖于目标计算机上已有的NC

这对于部署到服务器的Web应用程序很有效,因为NetCore和许多其他Web应用程序可能已经在服务器上了。


自包含的话,程序就比较大,但是 把程序放在U盘里面,这个程序不需要环境就可以运行了,这种方式也还可以。


新建Chapter07文件夹,然乎建立DcEveryWhere文件夹,在里面 新建控制台程序

修改DcEveryWhere.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <RuntimeIdentifiers>
      win10-x64;osx-x64;rhel.7.4-x64
    </RuntimeIdentifiers>
  </PropertyGroup>

</Project>

win10-x64 表示Win10或者Windows Server2016y以上

osx-x64 表示 macOS Sierra 10.12+

rhel.7.4-x64 表示 Red Hat Enterprise Linux(RHEL) 7.4 +

linux-x64、ubuntu.14.04-x64、win7-x64 或 osx.10.12-x64


更多RID:https://docs.microsoft.com/zh-cn/dotnet/core/rid-catalog

(书上地址已经不可用了)


Dotnet命令

如何创建、安装和卸载用于 dotnet new 命令的模板。

https://docs.microsoft.com/zh-cn/dotnet/core/tutorials/cli-templates-create-item-template


dotnet new -l 

image.png

管理项目

dotnet build 编译项目

dotnet clean 清理项目

dotnet pack 为项目创建NuGet包

dotnet publish 编译并发布项目,可以带有依赖项,也可以是自包含的应用程序

dotnet restore 下载项目的依赖项

dotnet run 运行项目

dotnet test 单元测试

dotnet store 将指定的程序集存储到运行时包存储区

add 把对包或类库的引用添加到项目

remove 从项目中删除对包或类库的引用

list:列出项目的包或类库的引用



发布自包含的应用程序

构建win10的

dotnet publish -c Release -r win10-x64

image.png


构建macOS的

dotnet publish -c Release -r osx-x64

image.png

在mac中执行后

image.png

构建Linux的

dotnet publish -c Release -r rhel.7.4-x64

image.png

没错,一个helloworld的包就这么大了,但是这是不需要用户 配置任何环境就可以运行的。




反编译程序集

安装ILSpy .NET反编译器扩展

image.png

ctrl+Shift+P,选中pcik file那个

image.png

选中一个程序集

image.png

左侧面板

image.png

选中一个文件,会反编译出源码,还有对应的IL代码

image.png

右键反编译的程序集,Unload Assembly就可以关闭

image.png


为NuGet分发打包自己的库

1 项目如何使用现有的包

现在使用newtonsoft.json

类似vs中引用newton的json处理库

终端输入

dotnet add package newtonsoft.json

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <RuntimeIdentifiers>
      win10-x64;osx-x64;rhel.7.4-x64
    </RuntimeIdentifiers>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="newtonsoft.json" Version="13.0.1" />
  </ItemGroup>

</Project>

使用dotnet add package 命令

始终使用包的最新特定版本。

using System;

namespace DcEveryWhere
{
    internal class Product
    {
        public string Name { getinternal set; }
        public DateTime Expiry { getinternal set; }
        public string[] Sizes { getinternal set; }
    }
}
using System;
using Newtonsoft.Json;

namespace DcEveryWhere
{
    class Program
    {
        static void Main(string[] args)
        {
            Product product = new Product();
            product.Name = "Apple";
            product.Expiry = new DateTime(20211228);
            product.Sizes = new string[] { "Small" };

            string json = JsonConvert.SerializeObject(product);
            System.Console.WriteLine(json);
            Console.ReadLine();
        }
    }
}

效果

image.png


为NuGet打包库


创建一个AyCommonShared类库

image.png

新建哟个StringExtensions类

using System;

namespace AyCommonShared
{
    public static class StringExtensions
    {
        public static bool IsOverMaxLengthV(this string strint maxlength)
        {
            if (str == null && maxlength > 0)
            {
                return false;
            }
            else
            {
                return true;
            }
            if (str.Length > maxlength)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
    }
}

编辑csproj修改内容

PackageId 必须全局唯一 Nuget发布到 https://www.nuget.org

PackageLicenseExpression 必须是来自 https://spdx.org/licenses/

你也可以指定自定义许可

下面是我自己修改的nuget包的一些细节

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <PackageId>AY.Chap7.AyCommonShared</PackageId>
    <PackageVersion>1.0.0.0</PackageVersion>
    <Authors>杨洋</Authors>
    <PackageLicenseExpression>MS-PL</PackageLicenseExpression>
    <PackageProjectURL>
      https://github.com/ay2015/AYUI8Community
    </PackageProjectURL>
    <PackageIcon>AyCommonShared.png</PackageIcon>
    <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
    <PackageReleaseNotes>ay学nuget发布的一个共享库</PackageReleaseNotes>
    <Description>提供一个字符串验证长度的功能</Description>
    <Copyright>
      Copyright . 2021 AY publish limited
    </Copyright>
    <PackageTags>string extension ay aycommonshared</PackageTags>
  </PropertyGroup>
  <ItemGroup>
    <None Include="AyCommonShared.png">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
    </None>
  </ItemGroup>
</Project>

开始编译

dotnet build -c Release

打包

dotnet pack -c Release

image.png

www.ayjs.net



打开网址

https://www.nuget.org/packages/manage/upload

登陆微软账号

image.png



image.png

点击 Browser按钮,选择你的Nupkg文件

image.png

等待会,点击submit

image.png


image.png


测试这个包

打开刚刚的 DcEveryWhere项目

你也可以使用 dotnet add package AY.Chap7.AyCommonShared

或者直接修改DcEveryWhere.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <RuntimeIdentifiers>
      win10-x64;osx-x64;rhel.7.4-x64
    </RuntimeIdentifiers>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Net.Http" Version="4.1.0-*" />
    <PackageReference Include="newtonsoft.json" Version="13.0.1" />
    <PackageReference Include="AY.Chap7.AyCommonShared" Version="1.0.0" />
  </ItemGroup>

</Project>

等待下面的库状态改变的时候就 可以直接用了,大约1个小时

image.png



搞好了,别人就可以使用你的库了。


过了一个小时后

image.png

状态变成了Listed

此时打开你的vscode,可以 dotnet restore一下,就可以安装你自己的库了,接下来就可以使用了

using System;
using Newtonsoft.Json;
using AyCommonShared;

namespace DcEveryWhere
{
    class Program
    {
        static void Main(string[] args)
        {
            bool canm="ay2021".IsOverMaxLengthV(10);
            Console.ReadLine();
        }
    }
}

F12你的代码

image.png



NetCore删除了 旧的技术,比如ASP.NET Web表单和非跨平台特性,如AppDomains 、 .NET Remoting和二进制序列化

dotnet restore恢复包



www.ayjs.net








推荐您阅读更多有关于“C#8.0core3,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

合肥科大智能常年招聘C# .NET CORE,vue前端,JAVA开发,有想换工作的私聊我AY唯一QQ:875556003和AY交流

抖音号:wpfui 工作是wpf,不接活,目前主要折腾maui

AYUI8社区版Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始,兴趣学习研究WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表