内容简介:====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========创建1个标准类库
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
创建1个标准类库
我们一开始写了2个,那如果还有4.0,3.5就不方便了
标准库有个依赖项
右击编辑
修改如下
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net20;net35;net40;net45;net46;netstandard1.4;netstandard2.0</TargetFrameworks> </PropertyGroup> </Project>
我们拷贝Common.cs文件
因为支持了2.0Framework ,他不支持LINQ的,所有有些代码就有约束了。
你可以在csproj,自己控制,下面是参考的,条件方式的引用
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net20|AnyCPU'"> <DebugType>full</DebugType> <DebugSymbols>true</DebugSymbols> </PropertyGroup> <ItemGroup Condition="'$(TargetFramework)' == 'net20'"> <PackageReference Include="NUnit.System.Linq" Version="0.6.0" /> </ItemGroup> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> <PackageReference Include="Microsoft.Win32.Registry" Version="4.4.0" /> </ItemGroup> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.4'"> <PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" PrivateAssets="compile" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'"> <Reference Include="System.Web" /> <Reference Include="System.Windows.Forms" /> <Reference Include="WindowsBase" Condition="'$(TargetFramework)' != 'net20'" /> </ItemGroup>
在写代码如果想支持多种,使用预处理器,下面是参考的 #if NET45啥的
#if DEBUG #if NET45 [assembly: AssemblyConfiguration(".NET Framework 4.5 Debug")] #elif NET40 [assembly: AssemblyConfiguration(".NET Framework 4.0 Debug")] #elif NET35 [assembly: AssemblyConfiguration(".NET Framework 3.5 Debug")] #elif NET20 [assembly: AssemblyConfiguration(".NET Framework 2.0 Debug")] #elif NETSTANDARD1_4 [assembly: AssemblyConfiguration(".NET Standard 1.4 Debug")] #elif NETSTANDARD2_0 [assembly: AssemblyConfiguration(".NET Standard 2.0 Debug")] #elif NETCOREAPP1_1 [assembly: AssemblyConfiguration(".NET Core 1.1 Debug")] #elif NETCOREAPP2_0 [assembly: AssemblyConfiguration(".NET Core 2.0 Debug")] #else #error Missing AssemblyConfiguration attribute for this target. #endif #else #if NET45 [assembly: AssemblyConfiguration(".NET Framework 4.5")] #elif NET40 [assembly: AssemblyConfiguration(".NET Framework 4.0")] #elif NET35 [assembly: AssemblyConfiguration(".NET Framework 3.5")] #elif NET20 [assembly: AssemblyConfiguration(".NET Framework 2.0")] #elif NETSTANDARD1_4 [assembly: AssemblyConfiguration(".NET Standard 1.4")] #elif NETSTANDARD2_0 [assembly: AssemblyConfiguration(".NET Standard 2.0")] #elif NETCOREAPP1_1 [assembly: AssemblyConfiguration(".NET Core 1.1")] #elif NETCOREAPP2_0 [assembly: AssemblyConfiguration(".NET Core 2.0")] #else #error Missing AssemblyConfiguration attribute for this target. #endif #endif
生成项目
我还看到一些程序集的知识点
当你的项目有很多 类库,当然你不能维护很多项目的Assembly的程序集的信息,统一版本啊,公司名称等很多信息,我的AYUI 7个类库,就遇到这种需求了。
当然我可以新建一个项目,使用 assembly 文件添加为链接的方式,这样只需要维护1个了。
每次下载Github上的项目看
会有个这种东西,不管这个
一个标准的程序集信息,外层有个文件,他不属于任何csproj,和上面我们说新建1个类库放共用文件的区别 CommonAssemblyInfo.cs 这里我拿NUnit架构讲的。
当然这个文件和snk强命名秘钥
然后项目都是添加为链接方式
我在项目新增了Assembly文件夹,放入了
属性中,创建1个资源,为了创建一个Properties文件夹,然后删除Resources.resx因为我用不上
然后添加文件链接引用这2个,然后新建一个类AssemblyInfo.cs
然后
using System; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; //[assembly: InternalsVisibleTo("nunit.framework.tests, PublicKey=002400000480000094" + // "000000060200000024000052534131000400000100010031eea" + // "370b1984bfa6d1ea760e1ca6065cee41a1a279ca234933fe977" + // "a096222c0e14f9e5a17d5689305c6d7f1206a85a53c48ca0100" + // "80799d6eeef61c98abd18767827dc05daea6b6fbd2e868410d9" + // "bee5e972a004ddd692dec8fa404ba4591e847a8cf35de21c2d3" + // "723bc8d775a66b594adeb967537729fe2a446b548cd57a6")] #if NET45 [assembly: AssemblyTitle("AY Framework (.NET Framework 4.5)")] #elif NET40 [assembly: AssemblyTitle("AY Framework (.NET Framework 4.0)")] #elif NET35 [assembly: AssemblyTitle("AY Framework (.NET Framework 3.5)")] #elif NET20 [assembly: AssemblyTitle("AY Framework (.NET Framework 2.0)")] #elif NETSTANDARD1_4 [assembly: AssemblyTitle("AY Framework (.NET Standard 1.4)")] #elif NETSTANDARD2_0 [assembly: AssemblyTitle("AY Framework (.NET Standard 2.0)")] #else #error Missing AssemblyTitle attribute for this target. #endif [assembly: AssemblyDescription("")] [assembly: AssemblyCulture("")] [assembly: CLSCompliant(true)] [assembly: AllowPartiallyTrustedCallers]
百度原因
.NET Core/Standard 2.0 推荐在项目属性的“Package”页配置程序集的 版本、描述 等信息。
编译时,会自动根据“Package”页的配置,生成 “ <项目名> .AssemblyInfo.cs”。其中便使用了 AssemblyFileVersionAttribute 等特性。
我们的 AssemblyInfo.cs 中也使用 AssemblyFileVersionAttribute 等特性。因为 AssemblyFileVersionAttribute 等特性是不允许重复,于是便报出CS0579错误了。
修改csproj
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
也可以单独控制
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
AssemblyInfo.cs代码
using System; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; //[assembly: InternalsVisibleTo("nunit.framework.tests, PublicKey=002400000480000094" + // "000000060200000024000052534131000400000100010031eea" + // "370b1984bfa6d1ea760e1ca6065cee41a1a279ca234933fe977" + // "a096222c0e14f9e5a17d5689305c6d7f1206a85a53c48ca0100" + // "80799d6eeef61c98abd18767827dc05daea6b6fbd2e868410d9" + // "bee5e972a004ddd692dec8fa404ba4591e847a8cf35de21c2d3" + // "723bc8d775a66b594adeb967537729fe2a446b548cd57a6")] #if NET46 [assembly: AssemblyTitle("AY Framework (.NET Framework 4.6)")] #elif NET45 [assembly: AssemblyTitle("AY Framework (.NET Framework 4.5)")] #elif NET40 [assembly: AssemblyTitle("AY Framework (.NET Framework 4.0)")] #elif NET35 [assembly: AssemblyTitle("AY Framework (.NET Framework 3.5)")] #elif NET20 [assembly: AssemblyTitle("AY Framework (.NET Framework 2.0)")] #elif NETSTANDARD1_4 [assembly: AssemblyTitle("AY Framework (.NET Standard 1.4)")] #elif NETSTANDARD2_0 [assembly: AssemblyTitle("AY Framework (.NET Standard 2.0)")] #else #error Missing AssemblyTitle attribute for this target. #endif [assembly: AssemblyDescription("")] [assembly: AssemblyCulture("")] [assembly: CLSCompliant(true)] [assembly: AllowPartiallyTrustedCallers]
CommonAssemblyInfo.cs
using System.Reflection; // // Common Information for the NUnit assemblies // [assembly: AssemblyCompany("AY Software")] [assembly: AssemblyProduct("AYUI X")] [assembly: AssemblyCopyright("Copyright (c) 2019 AY")] [assembly: AssemblyTrademark("AYUI is a MVC framework of WPF Tech.")] #if DEBUG #if NET46 [assembly: AssemblyConfiguration(".NET Framework 4.6 Debug")] #elif NET45 [assembly: AssemblyConfiguration(".NET Framework 4.5 Debug")] #elif NET40 [assembly: AssemblyConfiguration(".NET Framework 4.0 Debug")] #elif NET35 [assembly: AssemblyConfiguration(".NET Framework 3.5 Debug")] #elif NET20 [assembly: AssemblyConfiguration(".NET Framework 2.0 Debug")] #elif NETSTANDARD1_4 [assembly: AssemblyConfiguration(".NET Standard 1.4 Debug")] #elif NETSTANDARD2_0 [assembly: AssemblyConfiguration(".NET Standard 2.0 Debug")] #elif NETCOREAPP1_1 [assembly: AssemblyConfiguration(".NET Core 1.1 Debug")] #elif NETCOREAPP2_0 [assembly: AssemblyConfiguration(".NET Core 2.0 Debug")] #else #error Missing AssemblyConfiguration attribute for this target. #endif #else #if NET45 [assembly: AssemblyConfiguration(".NET Framework 4.5")] #elif NET40 [assembly: AssemblyConfiguration(".NET Framework 4.0")] #elif NET35 [assembly: AssemblyConfiguration(".NET Framework 3.5")] #elif NET20 [assembly: AssemblyConfiguration(".NET Framework 2.0")] #elif NETSTANDARD1_4 [assembly: AssemblyConfiguration(".NET Standard 1.4")] #elif NETSTANDARD2_0 [assembly: AssemblyConfiguration(".NET Standard 2.0")] #elif NETCOREAPP1_1 [assembly: AssemblyConfiguration(".NET Core 1.1")] #elif NETCOREAPP2_0 [assembly: AssemblyConfiguration(".NET Core 2.0")] #else #error Missing AssemblyConfiguration attribute for this target. #endif #endif
FrameworkVersion.cs
using System.Reflection; [assembly: AssemblyVersion("3.11.0.0")] [assembly: AssemblyFileVersion("3.11.0.0")]
OK了,这样每个项目,维护1份 程序集信息了。
关于程序集信息
使用InternalsVisibleTo特性干嘛的
是为了给其他类库测试 Internal级别的方法的,我们知道Internal只能本程序集调用。使用这个特性,就可以不修改源码的情况下,给别的测试项目测试用
这里是Nunit的
1. 如何获取PublicKey?
A: 在命令行下,使用sn -Tp Project1.Test.dll就可以看到PublicKey和PublicKeyToken
2. 如果Project1是个strong-named的项目,那么InternalsVisibleTo必须指定PublicKey,所以Project1.Test也必须使用强签名才能正确使用InternalsVisibleTo, 不然编译会出错,如果Project1没有使用强签名,那么Project1.Test也不必使用强签名,而且在使用InternalsVisibleTo的时候只需要程序集的名字就可以了,不需要设置PuklicKey。
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
以上内容AY 研究编写
推荐您阅读更多有关于“C#,”的文章
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- express 框架一些渗透技巧
- AY Github项目学框架技巧-CommonServiceLocator
- 渗透技巧之Powershell实战技巧
- 渗透技巧——快捷方式文件的参数隐藏技巧
- Python实用技巧,你不知道的7个好玩的Python技巧
- Python 技巧总结
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
韦斯 / 机械工业 / 2007-1 / 55.00元
本书是国外数据结构与算法分析方面的标准教材,使用最卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也在增长。本书把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。 第......一起来看看 《数据结构与算法分析》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
图片转BASE64编码
在线图片转Base64编码工具